我正在尝试将taglib作为静态编译的库包含在我的项目中。虽然我似乎可以从taglib源码中编译库,但是当我尝试构建项目的一部分时,编译器会抱怨缺少/未定义的符号。
我在macOS 10.9和taglib 1.11.1上使用Clang编译器(clang-600.0.57)。 TagLib带有CMake配置,我能够构建它附带的示例。
taglib库的构建似乎也可以正常工作,只有当我尝试将它们集成到自己的应用程序中时,我才会遇到问题。一些研究使我想到了这个话题: https://github.com/taglib/taglib/issues/510
因此,似乎taglib假定为stdlib,并且它与libc ++之间可能存在冲突。我尝试使用-DCMAKE_CXX_FLAGS="-stdlib=libc++"
标志将libc ++强制为stdlib,立即收到一个错误,提示libc ++与10.6不兼容,但可以通过将部署目标提高到10.9来轻松解决。
现在,我的cmake参数看起来像这样:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DCMAKE_OSX_ARCHITECTURES="x86_64" -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS="-stdlib=libc++"
该库似乎构建得很好。但是同样,将其集成到我的应用程序时遇到错误。 这次,似乎连taglib本身也无法识别:
Undefined symbols for architecture x86_64:
"TagLib::FileRef::FileRef(char const*, bool, TagLib::AudioProperties::ReadStyle)", referenced from:
TSampleAnalyser::ExtractMetaData(TString const&) in libFeatureExtraction.a(SampleAnalyser.o)
"TagLib::FileRef::~FileRef()", referenced from:
TSampleAnalyser::ExtractMetaData(TString const&) in libFeatureExtraction.a(SampleAnalyser.o)
ld: symbol(s) not found for architecture x86_64
我本以为第二个示例可以工作,但是看起来该库甚至根本无法被识别?
应该注意的是,该项目使用的是libc ++-我在10.9上使用clang,并且没有看到在Cmake或其他地方重写stdlib。我也尝试构建没有stdlib覆盖的库。
还应注意,我是C ++的初学者,所以请告诉我是否忘记分享重要信息,或者是否误解了我面前的某些信息。
谢谢!