我正在使用C++在Mountain Lion上的XCode 4.6中編寫代碼。我試圖添加和使用Apache log4cxx庫。我今天早上通過Brew安裝了這個庫。我正在鏈接liblog4cxx.dylib。我理解的只是一個符號不能被發現鏈接錯誤:將XCode項目動態鏈接到lib4cxx庫時,如何解決單符號鏈接錯誤?
用於建築x86_64的未定義符號:
「log4cxx ::記錄儀:: forcedLog(log4cxx ::助手:: ObjectPtrT 常量& ,性病:: __ 1 :: basic_string的, 的std :: __ 1 ::分配器>常量&,log4cxx :: SPI :: LocationInfo常量&) 常量」,從引用:
我知道這是查找該庫文件,因爲如果我刪除它,我會得到更多未定義的符號錯誤與log4cxx有關。
相關的代碼基本上是:
#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!
首先嚐試'nm -g liblog4cxx.dylib',看看符號是否被導出。如果沒有,那麼記錄器的分配可能會出錯。嘗試自己構建'liblog4cxx.dylib'。 – 2013-04-07 19:00:00
我遇到同樣的問題。我看到列出的未定義符號爲:「log4cxx :: Logger :: forcedLog(log4cxx :: helpers :: ObjectPtrT const&,std :: __ 1 :: basic_string ,std :: __ 1 :: allocator > const&,log4cxx :: spi :: LocationInfo const&)const「我會注意到我在32位環境下工作,但是我構建了通用dylib。無論如何,如果我做nm -g我看到: 「__ZNK7log4cxx6Logger11forcedLogLSERKNS_7helpers10ObjectPtrTINS_5LevelEEERKSsRKNS_3spi12LocationInfoE」這導致我相信它在那裏。有什麼建議麼? –
lvicks
2014-01-10 22:01:16