在Windows上CMa​​ke链接共享库(lib)但找不到DLL

时间:2017-12-01 05:13:50

标签: c++ windows dll cmake shared-libraries

假设我使用cmake创建这样的项目:

${root}/lib/CMakeLists.txt
add_library(FooLib SHARED ${SOURCES})

${root}/main/CMakeLists.txt
add_executable(Main main.cpp)
target_link_libraries(Main FooLib)

现在,如果我在linux上运行Main(在我的情况下是fedora),它将自动加载FooLib.so。但是在Windows上,Main.exe会抱怨找不到FooLib.dll。如果我复制FooLib.dll或手动指定PATH,Main.exe也可以正常工作。

我的问题是,这是因为Windows上的lib& dll工作流程吗?

有没有什么方法可以让Main.exe像Linux一样记住FooLib库的路径?

1 个答案:

答案 0 :(得分:-1)

如果静态或动态地将可执行文件与lib链接,则相应的dll需要与exe位于同一文件夹中。这是Windows应用程序的标准设计。主要原因是在加载dll时,包含导出函数引用的exe(这是由lib提供)调用驻留在dll中的这些函数的实现。

您可以将您的dll放在system32文件夹中,该文件夹通常位于C:\ Program文件或c:\ windows文件夹中,具体取决于操作系统类型32/64位等,因为这些被定义为Windows中的系统环境路径/变量。 / p>

将始终优先考虑exe驻留路径,然后是上述路径。请确保在system32中没有类似文件夹的重复项,因为exe可能会加载这些dll的函数。