2012-04-19 58 views
0

剝離掉所有不必要的代碼之後簡單的程序,這是一個拒絕編譯準系統版本:不能編譯使用的libxml ++,因爲glibmmconfig.h沒有找到

#include <iostream> 
#include <libxml++/libxml++.h> 

using namespace std; 

int main (int argc, char *argv[]) { 
    cout << "Hello, World!" << endl; 
    return 0; 
} 

我使用的是先進的即Fedora的yum將這些文件放在/usr/include/libxml++-2.6/libxml++中。最初,編譯器甚至找不到libml ++/libxml ++。h,因爲Fedora的yum將這些文件放在/usr/include/libxml++-2.6/libxml++中。所以我通過創建符號鏈接/ usr/include/libxml ++到/usr/include/libxml++-2.6/libxml++來解決這個問題。已停止編譯器抱怨找不到的libxml ++小時,但隨後,在的libxml ++。h對行

#include <ustring.h> 

再次編譯找不到。所以我再次創建了一個從/ usr/include/glibmm到/usr/include/glibmm-2.4/glibmm的符號鏈接,這是ustring.h實際駐留的地方。現在

編譯器已經停止抱怨ustring.h,但在ustring.h第一(實際)線

#include <glibmmconfig.h> 

,編譯器無法找到。

glibmmconfig.h的實際位置是/usr/lib64/glibmm-2.4/include。但我不想改變ustring.h。

有沒有辦法解決我的問題,而不必不斷創建符號鏈接等?

在此先感謝您的幫助。

編輯

我能夠避開我的問題與下列編譯器選項:

`pkg-config --cflags --libs glibmm-2.4 libxml++-2.6` 

感謝jpalecek爲指向的方式,但我不得不尋找一些更多的,直到我能夠解決我的問題。

雖然這些編譯器選項編譯上面的簡單程序,他們編譯失敗的libxml++ tutorial page教程:

#include <iostream> 
#include <libxml++/libxml++.h> 
#include <string.h> 

using namespace std; 

int main (int argc, char *argv[]) { 
    string FilePath = "SampleXMLDocument.xml"; 
    try { 
     xmlpp::DomParser Parser; 
     Parser.set_substitute_entities(); 
     Parser.parse_file (FilePath); 
     cout << "Successfully parsed XML file" << endl; 
    } catch (const exception& excp) { 
     cout << "Exception caught: " << excp.what() << endl; 
    } 
    return 0; 
} // End main() 

這一次,我收到了一堆錯誤類似如下:

等。

我想我的搜索仍在繼續。

+0

您使用的是哪個平臺/發行版? – sinelaw 2012-04-19 22:21:07

+0

Fedora 16,正如帖子中提到的那樣。 「uname -a」的輸出是「Linux localhost.localdomain 3.3.2-1.fc16.x86_64#1 SMP Sat Apr 14 00:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux」 – Shredderroy 2012-04-19 22:22:26

+0

對不起,我錯過了。 – sinelaw 2012-04-19 22:25:13

回答

1

您必須將正確的選項傳遞給編譯器,特別是正確的包含路徑。該包裝者已經提出,可以通過一個程序,讓您的選擇:xml++-config --cflags會給你-Ipath_to_headersxml++-config --libs會給你-lto_link

0

好吧,我不熟悉的Fedora 16,但我覺得你得到了一些鏈接錯誤,因爲的libxml ++無法找到。 1.檢查/ usr/lib /和libxml ++。so(也許這個名字......)可能定位的其他可能的目錄。確保/etc/ld.so.conf包含此路徑,以便鏈接可以找到它。如果沒有,嘗試添加libxml ++的位置並運行「ldconfig」進行更新。 2。檢查與G -l選項的使用++是正確的......

0

最簡單的方法取決於libxml的編譯庫++ - XX是使用pkg配置:

c++ -std=c++11 -Wall $(pkg-config --cflags --libs libxml++-2.6) -o test main.cc 

僅指定的libxml ++ - 2.6也將解決glibmm-2.4依賴關係。

相關問題