我在使用Boost和Mac OS X时遇到了麻烦。
我使用Qt Creator作为C ++项目的开发平台,主要是因为IDE和qmake
。
现在我正在开发一个应该是跨平台的C ++应用程序,但我不想使用Qt
框架本身。相反,我使用 STD 库(C ++ 11),Poco
和Boost
。
我想要实现的一个目标是在运行时加载动态链接库的插件系统。
我看到了一些像Boost-extension
这样不再受支持的项目和其他几个项目。
现在我正在使用Poco's Shared Libraries和他们的Class Loader
。我在演示结束时仔细阅读了教程。不幸的是我无法使它工作,我在编译时收到以下错误,其中ServiceBase
类是我的插件接口。
Undefined symbols for architecture x86_64:
"Poco::SharedLibrary::getSymbol(std::string const&)", referenced from:
Poco::ClassLoader<ServiceBase>::loadLibrary(std::string const&, std::string const&) in main.o
"Poco::SharedLibrary::hasSymbol(std::string const&)", referenced from:
Poco::ClassLoader<ServiceBase>::loadLibrary(std::string const&, std::string const&) in main.o
"Poco::SharedLibrary::SharedLibrary(std::string const&)", referenced from:
Poco::ClassLoader<ServiceBase>::loadLibrary(std::string const&, std::string const&) in main.o
"Poco::SystemException::SystemException(std::string const&, int)", referenced from:
Poco::MutexImpl::unlockImpl() in main.o
Poco::MutexImpl::lockImpl() in main.o
"Poco::LibraryLoadException::LibraryLoadException(std::string const&, std::string const&, int)", referenced from:
Poco::ClassLoader<ServiceBase>::loadLibrary(std::string const&, std::string const&) in main.o
ld: symbol(s) not found for architecture x86_64
我已将Poco库链接起来,而且几乎所有内容都已实现。
关于如何解决这个问题的任何建议?
P.S。我也在寻找实现插件系统的替代方案,可能更强大,当然也是跨平台的。
答案 0 :(得分:2)
声明。我没有这个Poco库的经验。
没有关于您的环境或工具的更多详细信息......我只能提供一些非常一般性的建议:
我如何追逐这个:
我知道你说你已经链接了Poco库,但错误显然是缺少一个符号。要么缺少库,要么需要调整-l标志的顺序以满足依赖性。 nm可以帮助您确定哪些对象或库引用到符号(必须先到达)以及哪些对象或库定义符号(必须稍后出现)。
抱歉没有更多的帮助。
P.S。此外,您可能希望查看可能相关的Linking error with Poco Net。
另一个对问题的引用,该问题详细说明了链接器错误的不同原因:What is an undefined reference/unresolved external symbol error and how do I fix it?