Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
gcc忽略要链接的显式指定的链接库 我使用CGue/VCPKG管理我的C++程序依赖,并在Linux上遇到链接问题。p>_C++_Cmake_Linker_Undefined Symbol_Vcpkg - Fatal编程技术网

gcc忽略要链接的显式指定的链接库 我使用CGue/VCPKG管理我的C++程序依赖,并在Linux上遇到链接问题。p>

gcc忽略要链接的显式指定的链接库 我使用CGue/VCPKG管理我的C++程序依赖,并在Linux上遇到链接问题。p>,c++,cmake,linker,undefined-symbol,vcpkg,C++,Cmake,Linker,Undefined Symbol,Vcpkg,我的程序依赖于库X(arrow更具体地说),库X在内部依赖于另一个库Y(RE2)。当我将我的程序链接到库X时,链接在macOS X(Apple clang 11)上起作用,而在debian(g++9.3)上不起作用,在库Y中找不到报告符号,即使我直接将库Y链接到我的程序,Linux下的链接器仍会报告符号丢失 目前我找到的唯一解决方法是使用库Y在程序中编写一个无用的函数,因此,链接器将链接库Y。在我看来,链接器似乎很聪明,避免链接库Y,因为它不是我的程序直接使用的,但在链接到库X时报告错误,因为它

我的程序依赖于库X(
arrow
更具体地说),库X在内部依赖于另一个库Y(
RE2
)。当我将我的程序链接到库X时,链接在macOS X(Apple clang 11)上起作用,而在debian(g++9.3)上不起作用,在库Y中找不到报告符号,即使我直接将库Y链接到我的程序,Linux下的链接器仍会报告符号丢失

目前我找到的唯一解决方法是使用库Y在程序中编写一个无用的函数,因此,链接器将链接库Y。在我看来,链接器似乎很聪明,避免链接库Y,因为它不是我的程序直接使用的,但在链接到库X时报告错误,因为它在库Y中找不到X使用的符号

对于这个特定的库来说,这似乎不是问题,因为我在Linux上也有另一个库具有相同的情况。其中一个可能的原因是我试图使我的程序成为一个共享库,但我不知道它是否相关。有人能解释一下这是怎么发生的,我该如何解决它吗

以下是报告的错误消息:

/usr/bin/ld: /vcpkg/installed/x64-linux/debug/lib/libarrow.a(gdv_function_stubs.cc.o): in function `bool re2::RE2::FullMatch<>(re2::StringPiece const&, re2::RE2 const&)':
/vcpkg/installed/x64-linux/include/re2/re2.h:368: undefined reference to `re2::RE2::FullMatchN(re2::StringPiece const&, re2::RE2 const&, re2::RE2::Arg const* const*, int)'
/usr/bin/ld:/vcpkg/installed/x64 linux/debug/lib/libarrow.a(gdv_function_stubs.cc.o):在函数'bool re2::re2::FullMatch(re2::StringPiece const&,re2::re2 const&')中:
/vcpkg/installed/x64 linux/include/re2/re2.h:368:对“re2::re2::FullMatchN(re2::StringPiece const&,re2::re2 const&,re2::re2::Arg const*const*,int)”的未定义引用

如果
uuid
是静态库,那么
antrlr4
库,即使它是共享库,也不记得链接到
uuid
。因此,当您的程序与
antrl4
链接时,您也需要与
uuid
链接。您试图描述您的代码,但这种描述相当模糊。最好在你的代码上贴上它产生的确切错误消息。@Tsyvarev谢谢你指出这一点,我确实意识到描述太模糊了,问题是错误消息本身是非常常见的链接错误消息,只是说一些类似于对某个函数xxx的未定义引用。,我用一些详细的错误消息更新了我的描述(我现在没有uuid问题错误消息,所以我使用了我现在拥有的RE2,同样的问题)