我在 Mountain Lion 上的 XCode 4.6 下用 C++ 编写。我正在尝试添加和使用 Apache log4cxx 库。我今天早上通过 Brew 安装了这个库。我正在链接 liblog4cxx.dylib。我收到一个链接错误,指出无法找到一个符号:
Undefined symbols for architecture x86_64:
"log4cxx::Logger::forcedLog(log4cxx::helpers::ObjectPtrT const&, std::__1::basic_string, std::__1::allocator > const&, log4cxx::spi::LocationInfo const&) const", referenced from:
我知道它正在查找库文件,因为如果我删除它,我会收到更多与 log4cxx 相关的 undefined symbol 错误。
相关代码基本上是:
#include <log4cxx/logger.h>
static LoggerPtr logger(log4cxx::Logger::getLogger("foo.bar.Baz"));
void foo(int p1, int p2)
{
LOG4CXX_WARN(logger, "blah blah blah");
}
在函数内部创建记录器对象,无论是否静态,都不会改变行为。此外,与静态库链接,无论是否在我的项目中定义 LOG4CXX_STATIC,都不会改变行为。
查看我正在调用的宏,我发现这个符号是执行日志操作的实际方法。如果删除日志记录调用但保留定义记录器对象的代码,则代码链接正常,如您所料。
我需要做什么才能解析最后一个符号?
TIA!
最佳答案
我将我的问题追溯到在非 C++11 编译器中编译库,但后来我的目标项目是 C++11 编译器。
通过查看开发 git repo 中对 log4cxx 的更改,我能够在 C+11 编译器中编译 log4cxx,主要包括插入 static_casts,如本次更新所示:
我想少数不兼容的例程是未定义的,这就是为什么我们只对少数看似随机的未定义感到困惑。 (或者无论如何我都是)
关于c++ - 将 XCode 项目动态链接到 lib4cxx 库时,如何解决单个符号链接(symbolic link)错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15865826/