编译动态可链接库
我目前正在尝试编译动态可链接库,该库将在运行时与我正在编写的应用程序链接。 我不确定这些库是如何调用的,所以只是为了确定:它们是您不在编译期间加载的库,而是在运行时使用的库:
- 使用 libdl 的 dlopen / dlsync
- 使用 Windows 的 LoadLibrary /(另一个名称复杂的库)。
问题是我找不到在 Windows 下编译这些库的 CMake 方法:使用 Linux,这工作得很好:
set(libName myLib)
set(srcFiles myLib.cpp)
add_library(${libName} MODULE ${srcFiles})
不过,运行 Windows,它根本不起作用:Makefile 试图链接一些代码片段myLib.cpp 正在引用(但它不应该......这些符号应该在运行时解析)。
我正在使用 CodeBlocks MinGW 生成器(如果有帮助的话)。
I'm currently trying to compile dynamicaly linkable libraries, which would link during run-time with an application I'm writing.
I'm not sure how these libraries are called, so just to be sure : they're those libraries you load not during compilation, but during runtime using :
- dlopen / dlsync using libdl
- LoadLibrary / (another one with a complicated name) using Windows.
The thing is I can't find a CMake-way to compile those librairies under Windows : using Linux, this works perfectly :
set(libName myLib)
set(srcFiles myLib.cpp)
add_library(${libName} MODULE ${srcFiles})
Still, running Windows, it doesn't work at all : the Makefile is trying to link some pieces of code the myLib.cpp is referencing to (but it shouldn't... those symbols should be resolved at runtime).
I'm using the CodeBlocks MinGW generator if it may helps.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为这会有所帮助:
add_library(${libname} SHARED ${srcfiles})
正如 CMake 文档所述,MODULE 应该用于构建应该使用类似于 dlopen 的功能动态加载的库。在 Windows 上使用 SHARED 而不是 MODULE。
I think this would help:
add_library(${libname} SHARED ${srcfiles})
As CMake documentation says, MODULE should be used for building libraries that should be dynamically loaded using dlopen-like functionality. On Windows use SHARED instead of MODULE.