c++ - CMake 测试 : was a library compiled/linked against libc++ or libstd++?

标签 c++ cmake libstdc++ libc++

我正在使用 cmake 来管理我使用第三方库的项目。

此库可能已针对 libc++ 或 libstd++(取决于版本)进行编译/链接。

我知道如何告诉 cmake 将我的项目编译/链接到 libc++ 或 libstdc++,但我不知道如何检查我正在使用的库是否是根据 libc++ 或 libstd++ 编译/链接的。有任何 cmake 命令可以检查吗?

最佳答案

对于共享库,您可以使用 GetPrerequisites用于测试库是否依赖于 libstc++ 或 libc++ 的标准模块。

例如,以下代码测试 boost 的 program_options 库是否针对 libstc++ 或 libc++ 进行了编译:

set (_library "/usr/local/lib/libboost_program_options.dylib")
set (_prequesites "")
set (_exclude_system FALSE)
set (_recurse FALSE)
set (_exePath "")
set (_searchDirs "")
get_prerequisites(${_library} _prequesites ${_exclude_system} ${_recurse} "${_exePath}" "${_searchDirs}")
if (_prequesites MATCHES "/libstdc\\+\\+")
    message("using libstc++")
elseif (_prequesites MATCHES "/libc\\+\\+")
    message("using libc++")
else()
    message("using neither libstc++ nor libc++")
endif()

对于静态库,您可能必须求助于在库文件上运行 nm 以确定外部符号,然后在输出中搜索特征字符串,如 __gnu_

关于c++ - CMake 测试 : was a library compiled/linked against libc++ or libstd++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30095610/

相关文章:

c++ - libstdc++-6.dll 问题

c++ - 为什么这不编译?

boost - 使 cmake 的 find_package(Boost ...) 在 conda 环境中找到头文件

c++ - 共享库与接口(interface)中的 STL 对象的 GCC 兼容性

c++ - CMake 库链接不正确

QtCreator : Issues not displayed in Issue panel any more

CMAKE:在 clang/g++ 和 libc++/libstdc++ 之间切换

c++ - 多线程标准输出顺序

c++ - sizeof(short) == sizeof(int) 实现的整数提升

c# - 使用 P/Invoke 时存储非托管代码的数据