小编lec*_*bre的帖子

将可执行文件链接到第三方相关共享库时的 C++ CMake 未定义引用

我阅读了很多相关主题(如123),但我自己没有找到答案,所以我在这里。

我有一个构建和可执行的 CMake 项目,比如说“x”。我创建了一个名为“a.so”的共享库,它依赖于其他名为“b.so”的共享库。我想在“x”中使用“a”。

这是我简化的“x”CMakelists.txt:

SET(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})

LINK_DIRECTORIES(${ROOT_DIR}/lib/a/bin/) # contains liba.so

INCLUDE_DIRECTORIES(${ROOT_DIR}/lib/a/include/) # contains "a" headers

ADD_EXECUTABLE(x ${SOURCE})

TARGET_LINK_LIBRARIES(x a)
Run Code Online (Sandbox Code Playgroud)

"x" 编译输出摘录:

Linking CXX executable ../bin/x
/usr/bin/cmake -E cmake_link_script CMakeFiles/x.dir/link.txt --verbose=1
/usr/lib64/ccache/c++   -std=c++0x    CMakeFiles/x.dir/src/main /Main.cpp.o 
 ... -L/.../lib/a/bin -rdynamic  -la  -Wl,-rpath,/.../lib/a/bin 
Run Code Online (Sandbox Code Playgroud)

“a”和“b”可以编译。

问题是当我想编译 x 时,我在链接时出错:未定义对“函数名称”的引用。 我也尝试链接到“b”,但它仍然无法正常工作

这里“b”也出现了,但我得到了同样的错误......

Linking CXX executable ../bin/x
/usr/bin/cmake -E cmake_link_script CMakeFiles/x.dir/link.txt --verbose=1 
/usr/lib64/ccache/c++   -std=c++0x    CMakeFiles/x.dir/src/main 
/Main.cpp.o -o ../bin/x  -L/.../lib/b/bin -L/.../lib/a/bin 
-rdynamic -lb -la -Wl,-rpath,/.../lib/b/bin:/.../lib/a/bin 
Run Code Online (Sandbox Code Playgroud)

这是错误输出:

 $ make
 [ 20%] Automatic …
Run Code Online (Sandbox Code Playgroud)

c++ linker cmake shared-libraries juce

5
推荐指数
1
解决办法
5170
查看次数

标签 统计

c++ ×1

cmake ×1

juce ×1

linker ×1

shared-libraries ×1