当试图与我用Xcode 6.3.2构建的动态库链接时,我对参数为std::string的类函数的所有调用都拒绝链接:
Undefined symbols for architecture x86_64:
âMyClass::Bogus(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)â,â¦
包含dylibs.h文件,公共类成员的原型为:
int Bogus(std::string& aStringRef, bool verbose);
有趣的是,如果我将第一个std::string参数的类型更改为long(并使用long作为第一个参数调用它),则不会出现链接错误。所以我知道我肯定和我建立的dylib有联系。
对于我的dylib,Apple LLVM 6.1 C++标准库设置为默认值(libstdc++)。
我调用的代码本身是一个.dylib,它不是从Xcode编译和链接的,而是完全从makefile编译和链接。用于从该makefile编译的c++版本为:
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
我觉得可疑的一点是,调用代码是使用“-std=c++1y”编译的,这可能是使用c++14的标准库。为调用程序链接的标准库与我选择用于构建dylib的标准库之间是否存在冲突?(我的dylib代码是用编译器方言=GNU++98编译的)