Coder Social home page Coder Social logo

Comments (9)

fpagliughi avatar fpagliughi commented on August 18, 2024 1

Did you try to build any executables (like the samples) after you did this? I'm getting a .lib file (although it's only 32kB) and getting all sorts of errors and warnings now.

from paho.mqtt.cpp.

fpagliughi avatar fpagliughi commented on August 18, 2024 1

If you ask for a static build, does it still try to build the DLL?

from paho.mqtt.cpp.

guilhermeferreira avatar guilhermeferreira commented on August 18, 2024

According to this Stackoverflow's question, the paho-mqttpp3.lib is not created because there are no symbols exported. Then, I used the DLLExport macro from Paho MQTT C to test:

class DLLExport async_client : public virtual iasync_client
{
    // ...
};

And it forces the Visual Studio to create the paho-mqttpp3.lib:

C:\Temp\paho.mqtt.cpp\build_cmake>dir src
 Volume in drive C is OSDisk
 Volume Serial Number is C2D6-0DCE

 Directory of C:\Temp\paho.mqtt.cpp\build_cmake\src

06/01/2017  11:54 AM    <DIR>          .
06/01/2017  11:54 AM    <DIR>          ..
06/01/2017  11:54 AM    <DIR>          CMakeFiles
05/31/2017  06:23 PM             1,449 cmake_install.cmake
05/31/2017  06:23 PM            25,405 Makefile
06/01/2017  11:54 AM    <DIR>          mqtt
05/31/2017  06:24 PM           639,488 paho-mqttpp3.dll
05/31/2017  06:24 PM               381 paho-mqttpp3.dll.manifest
05/31/2017  06:24 PM            94,568 paho-mqttpp3.exp
05/31/2017  06:24 PM           156,904 paho-mqttpp3.lib
               6 File(s)        918,195 bytes
               4 Dir(s)  809,452,789,760 bytes free

from paho.mqtt.cpp.

guilhermeferreira avatar guilhermeferreira commented on August 18, 2024

I guess the DLLExport is required in every class/symbol the samples (or other binary) will use. Otherwise, you will get a lot of "undefined reference" errors. Also, I'm struggling with other errors, like library paths and machine architecture mismatch. The things get complicated because I don't have too much experience with NMake.

from paho.mqtt.cpp.

fpagliughi avatar fpagliughi commented on August 18, 2024

I went through and tried adding it to all the classes, but then started having errors from static data, so then tried to figure that out.

I also got lots and lots of C4251 warnings. This seems to be mostly (if not all) from things that Microsoft tells you to ignore, but I can't really be sure if they are all safe to ignore without reading through each and every of them, and I don't really feel like doing that!

What's worrisome, though, is a couple of issues raised by the documentation for the warning:
https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(C4251);k(vs.output)&rd=true

  • No inlined methods of your class can modify static data.
  • No inlined methods of your class use CRT functions or other library functions use static data

I don't know if I can make this promise, or that I can remember it in the future!

By this, I would claim that Windows DLL's are not fully compliant with C++11, and that is the one thing I have tried to stick with, and require, in this library.

So, basically, if the static library CMake build works for Windows, I am content that release 1.0 doesn't support DLL's. Then we can make an issue to be addressed in the next release, if ever.

from paho.mqtt.cpp.

fpagliughi avatar fpagliughi commented on August 18, 2024

Can we use CMake to just build a static .lib file on Windows?

from paho.mqtt.cpp.

guilhermeferreira avatar guilhermeferreira commented on August 18, 2024

So, basically, if the static library CMake build works for Windows,

@fpagliughi yes, it works. Clients can link against the paho-mqttpp3-static.lib instead of the pair paho-mqttpp3.lib / paho-mqttpp3.dll.

I am content that release 1.0 doesn't support DLL's.

We must state somewhere (documentation? enforce through the CMakeLists.txt?) that the current version does not support DLLs.

Then we can make an issue to be addressed in the next release, if ever.

Perfect.

Can we use CMake to just build a static .lib file on Windows?

Yes, it already does. If the option PAHO_BUILD_STATIC is enabled , the compilation produces the paho-mqttpp3-static.lib file.

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX="C:\Temp\paho-cpp" -DPAHO_MQTT_C_PATH="C:\Temp\paho-c" -DPAHO_WITH_SSL=FALSE -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_STATIC=TRUE -DGTEST_PATH="C:\Temp\GTest" -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=TRUE ..

from paho.mqtt.cpp.

guilhermeferreira avatar guilhermeferreira commented on August 18, 2024

If you ask for a static build, does it still try to build the DLL?

Yes, @fpagliughi. Currently, the static library creation is optional, the DLL is mandatory.

from paho.mqtt.cpp.

fpagliughi avatar fpagliughi commented on August 18, 2024

Fixed in the 'develop' branch. Windows can now build static and shared lib.

from paho.mqtt.cpp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.