C ++项目链接静态和共享库

问题描述

我有一个c ++项目。其项目结构如下:

.
|--src
|   |--foo
|   |   |--foo.h
|   |   |--foo.cpp
|   |   |--CMakeLists.txt
|   |
|   |--bar
|       |--bar.h
|       |--bar.cpp
|       |--CMakeLists.txt
|
|--main.cpp
|--CMakeLists.txt

我通过在foo中使用baradd_library(foo STATIC ${FOO_DIR})CMakeLists.txt添加为静态库。

main.cpp使用静态链接链接foobar库。

现在我有一些第三方共享库,例如abc.so

在顶级CMakeLists.txt中:

project(my_proj)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc -static")

#find abc libs
find_package(abc required)
...

#adding foo bar subdirectories
...

add_executable(my_proj main.cpp)
target_link_libraries(my_proj foo bar abc)

main.cpp链接foobarabc.so时,显示错误attempted static link of dynamic object /xxx/abc.so

我该如何同时链接共享库和静态库?

更新

如果我尝试删除-static,则会显示错误

ibQt5Core.a(qstringlist.o): undefined reference to symbol '_ZNSt3pmr25monotonic_buffer_resourceD1Ev@@GLIBCXX_3.4.28'
/usr/bin/ld: /usr/lib/libstdc++.so.6: error adding symbols: DSO missing from command line

即使我明确使用它,它也链接到libstdc ++共享库

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")

如何链接静态libstdc ++?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...