Dll 动态符号的静态链接搜索(VS 2015)
我试图编译一个项目,并将其与我以前编译的静态库链接。 我的文件已编译,但它没有链接 我收到这些消息(我将其截断,否则太长): 据我所知,_uimp_u_u符号表示链接器正在尝试查找dll。但是,我将库编译为静态库,并正确设置了“附加库目录”和“附加依赖项” 我的库是以/MD作为可执行文件编译的。我试图切换到/MT,但因为我有其他依赖项等。。。它开始把一切都搞砸了 我检查了图书馆,符号在那里,但没有_uimp_uu前缀 我还将我的库放在末尾,这样它就可以解析符号了,但它仍然不起作用 我不知道这里发生了什么。欢迎任何帮助 谢谢 编辑:实际上,这比我提到的要简单一些。以下是我所拥有的:Dll 动态符号的静态链接搜索(VS 2015),dll,compiler-errors,static,linker,Dll,Compiler Errors,Static,Linker,我试图编译一个项目,并将其与我以前编译的静态库链接。 我的文件已编译,但它没有链接 我收到这些消息(我将其截断,否则太长): 据我所知,_uimp_u_u符号表示链接器正在尝试查找dll。但是,我将库编译为静态库,并正确设置了“附加库目录”和“附加依赖项” 我的库是以/MD作为可执行文件编译的。我试图切换到/MT,但因为我有其他依赖项等。。。它开始把一切都搞砸了 我检查了图书馆,符号在那里,但没有_uimp_uu前缀 我还将我的库放在末尾,这样它就可以解析符号了,但它仍然不起作用 我不知道这里发
FLANN library ---> file1.cpp --
file1.h | ---> files.lib ----
file2.cpp | |
file2.h -- |---> program.exe
FLANN.lib ------------------------------------------
基本上,我有使用FLANN库的文件(包括FLANN库的头和调用函数)。我想创建这些文件的静态库,并将其链接到myprogram.exe(这就是我前面提到的错误所在)。
但是我注意到files.lib中已经有符号了。我不明白为什么它会在那里使用动态符号
我想做的是告诉files.lib使用FLANN.lib的静态符号,因为这是我将链接myprogram.exe的对象,但到目前为止,链接器似乎并不在意,只是假设FLANN将是一个动态库。我终于找到了答案 事实证明,编译器无法提前知道我是将FLANN链接到静态库还是动态库 所以我深入研究了FLANN库本身,其中有一个宏(FLANN_STATIC)应该作为编译定义(cmake中的target_compile_定义)传递,以让编译器知道它将是一个静态库(正如我们所说的,默认情况下,它假定它将是一个动态库) 然后,我必须为files.lib添加到我的CMakeLists.txt中:
target_compile_definitions(files.lib PUBLIC FLANN_STATIC)
它成功了。
我知道没有人回答,但我花了好几个小时才找到这个,所以希望有一天,它可以节省一些人的时间
target_compile_definitions(files.lib PUBLIC FLANN_STATIC)