相关疑难解决方法(0)

如果clang ++和g ++是ABI不兼容的,那么二进制文件中的共享库使用了什么?

clang ++和g ++是ABI不兼容的,即使对于像标准容器这样的核心东西,例如clang ++网站.

Debian附带了C++共享库,即libboost等...使用两种编译器编译的东西和用户程序通常都可以工作,并且库名称不会被用于它们的编译器损坏.当你安装clang时,debian不会去你系统上安装的每个C++库的重复版本.

这是怎么回事?clang与发行版提供的C++库链接的能力是否比编译器开发人员描述的那样强大(谢天谢地)?

c++ shared-libraries abi

22
推荐指数
2
解决办法
3560
查看次数

构建库时的Clang和undefined符号

我正在研究一个C++框架,当我在使用Clang的OSX上编译它时会出现一些问题.

首先,我正在使用其他一些库,例如openssl,而clang抱怨我在构建库时没有解决某些符号.它们不应该是:这些库将与最终的二进制文件链接,它不应该发生在中介上.

然后,还有一些方法和变量应该在"客户端"二进制文件中实现...使用GCC,没有问题,但Clang也抱怨这些符号在编译期间无法解决.

怎么会 ?我该怎么办 ?

这是我的CMakeLists.txt,以防有用:

cmake_minimum_required(VERSION 2.8)

project(crails_project)

set(CMAKE_CXX_FLAGS "-std=c++0x -Wall -Wno-deprecated-declarations -pedantic -DASYNC_SERVER -DSERVER_DEBUG -DUSE_MONGODB_SESSION_STORE")

find_package(cppnetlib REQUIRED)

include_directories(include /usr/local/include ${CPPNETLIB_INCLUDE_DIRS} .)

file(GLOB crails_core
     src/*.cpp)

file(GLOB crails_sql
     src/sql/*.cpp)

file(GLOB crails_mongodb
     src/mongodb/*.cpp)

add_library(crails-core    SHARED ${crails_core})
add_library(crails-sql     SHARED ${crails_sql})
add_library(crails-mongodb SHARED ${crails_mongodb})
Run Code Online (Sandbox Code Playgroud)

这是崩溃的命令:

/usr/bin/c++  -std=c++0x -Wall -Wno-deprecated-declarations -pedantic -DASYNC_SERVER -DSERVER_DEBUG -DUSE_MONGODB_SESSION_STORE -dynamiclib -Wl,-headerpad_max_install_names   -o libcrails-core.dylib -install_name /Users/michael/Personal/crails/build/libcrails-core.dylib CMakeFiles/crails-core.dir/src/assets.cpp.o CMakeFiles/crails-core.dir/src/cgi2params.cpp.o CMakeFiles/crails-core.dir/src/cipher.cpp.o [...]
Run Code Online (Sandbox Code Playgroud)

以下是我得到的两种错误:

架构x86_64的未定义符号:

  "_BIO_ctrl", referenced from:
      Cipher::encode_base64(unsigned char*, unsigned int) const in cipher.cpp.o
Run Code Online (Sandbox Code Playgroud)

第二个:

  NOTE: a missing vtable usually means …
Run Code Online (Sandbox Code Playgroud)

c++ cmake clang

8
推荐指数
2
解决办法
1万
查看次数

我可以用gcc编译一个函数然后用clang吗?

我试图使用SSE4.2内部函数与clang/llvm,但它没有编译,因为我cannot select intrinsic从LLVM 得到错误.另一方面,相同的代码在gcc中完美地编译.所以我想,也许我可以使用gcc编译该函数,以便拥有一个对象或库文件,然后在我的代码中调用该库函数,该函数由clang/llvm编译.那会有用吗?

c gcc llvm clang

7
推荐指数
1
解决办法
4113
查看次数

GCC 4.0,4.2和LLVM ABI兼容性

Xcode(gcc 4.0,4.2和llvm)支持的三种主要编译器风格是否是二进制兼容的?在使用最新的Xcode工具快速实现多库项目时,我应该注意哪些问题和角落案例?

xcode gcc llvm binary-compatibility

6
推荐指数
1
解决办法
2739
查看次数

标签 统计

c++ ×2

clang ×2

gcc ×2

llvm ×2

abi ×1

binary-compatibility ×1

c ×1

cmake ×1

shared-libraries ×1

xcode ×1