在構建共享對象時,我忘記了將第三方「頭僅」頭庫(.h)文件放入正確的路徑。它建立得很好 - 回顧性地令人驚訝。由於缺少頭文件導致的段錯誤
當我的共享對象中使用第三方庫時,運行段錯誤發生在該行的恰好位置。
我不明白的部分是當我將這些頭文件複製到#include
指定的路徑時,我無法導致段錯誤。我甚至沒有重新構建這個對象。非常奇怪的是,當我mv的頭文件在目錄中,它仍然工作 - 沒有段錯誤。但是,當我完全掌握這個目標時,它就崩潰了。它是否查找當前目錄和子目錄的頭文件?我也有標準的只有標題庫(?)/usr/local/include
我以前沒有使用共享對象。我通常創建靜態對象並將它們包含在構建中。我用來創建共享對象的標誌是-shared -fPIC
我想了解此行爲。由於部署,這很有趣。在生產計算機上部署時是否需要包含這些頭文件?基本上我不想把它作爲一個依賴項,因爲它是一個「僅標題」的庫。
編輯
代碼:
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
void MyClass::myFunction()
{
rapidjson::StringBuffer string;
rapidjson::Writer<rapidjson::StringBuffer> jsonWriter(string);
}
這裏是調試會話的鏈接: http://pastebin.com/a0FaQwf1
這可能是因爲當你沒有包含頭文件時,自動生成的函數原型可能會與實際函數不匹配,所以編譯器會做一些愚蠢的事情導致段錯誤。 – 2012-04-12 10:05:07
此外,您長期以來一直是會員,所以您應該知道我們需要查看一些代碼才能真正幫助您。 – 2012-04-12 10:08:48
任何編譯器警告? – 2012-04-12 10:15:54