【发布时间】:2014-10-14 19:12:31
【问题描述】:
我正在开发一个 C++ 框架,当我在 OSX 上使用 Clang 编译它时出现了一些问题。
首先,我正在使用其他一些库,例如 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})
这是崩溃的命令:
/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 [...]
这是我得到的两种错误:
架构 x86_64 的未定义符号:
"_BIO_ctrl", referenced from:
Cipher::encode_base64(unsigned char*, unsigned int) const in cipher.cpp.o
第二个:
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for boost::detail::thread_data_base", referenced from:
boost::detail::thread_data_base::thread_data_base() in server.cpp.o
【问题讨论】:
-
你得到的错误是什么?您是否尝试过进行详细构建,以查看正在使用哪些命令(和标志)(即生成一个 makefile,并使用
VERBOSE=1运行它)? -
感谢您的回答,我更新了帖子的更多细节!
-
第一个错误使用
-lcrypto