Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dll 动态符号的静态链接搜索(VS 2015)_Dll_Compiler Errors_Static_Linker - Fatal编程技术网

Dll 动态符号的静态链接搜索(VS 2015)

Dll 动态符号的静态链接搜索(VS 2015),dll,compiler-errors,static,linker,Dll,Compiler Errors,Static,Linker,我试图编译一个项目,并将其与我以前编译的静态库链接。 我的文件已编译,但它没有链接 我收到这些消息(我将其截断,否则太长): 据我所知,_uimp_u_u符号表示链接器正在尝试查找dll。但是,我将库编译为静态库,并正确设置了“附加库目录”和“附加依赖项” 我的库是以/MD作为可执行文件编译的。我试图切换到/MT,但因为我有其他依赖项等。。。它开始把一切都搞砸了 我检查了图书馆,符号在那里,但没有_uimp_uu前缀 我还将我的库放在末尾,这样它就可以解析符号了,但它仍然不起作用 我不知道这里发

我试图编译一个项目,并将其与我以前编译的静态库链接。 我的文件已编译,但它没有链接

我收到这些消息(我将其截断,否则太长):

据我所知,_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)