2012-12-21 65 views
0

我試圖編譯程序,並且連接失敗,出現以下消息:找不到-lX11

gcc -O2 -pipe -Wl,--export-dynamic tkAppInit.o -L/home/dimitriv/ns-allinone-2.35/tk8.5.10/unix -ltk8.5 \
-L/home/dimitriv/ns-allinone-2.35/tcl8.5.10/unix -ltcl8.5 -lX11 -ldl -lieee -lm -Wl,-rpath,/home/dimitriv/ns-allinone-2.35/lib -o wish /usr/bin/ld: cannot find -lX11
collect2: error: ld returned 1 exit status

然而,我$LD_LIBRARY_PATH包含其中X11已安裝的目錄:

echo $LD_LIBRARY_PATH
/share/apps/cim/lib:/opt/ns2/otcl-1.13:/opt/ns2/lib:/home/dimitriv/local/lib:

和庫似乎被正確安裝。

ls /home/dimitriv/local/lib | grep X11
libX11.a
libX11.la
libX11.so
libX11.so.6
libX11.so.6.3.0
libX11-xcb.a
libX11-xcb.la
libX11-xcb.so
libX11-xcb.so.1
libX11-xcb.so.1.0.0
X11

爲什麼不能讓找到庫和做鏈接?

+1

[閱讀](http://stackoverflow.com/a/4250666/1171191) – BoBTFish

回答

1

,你可以在編譯命令本身看:

gcc -O2 -pipe -Wl,--export-dynamic tkAppInit.o -L/home/dimitriv/ns-allinone-2.35/tk8.5.10/unix -ltk8.5 \ 
-L/home/dimitriv/ns-allinone-2.35/tcl8.5.10/unix -ltcl8.5 -lX11 -ldl -lieee -lm -Wl,-rpath,/home/dimitriv/ns-allinone-2.35/lib -o wish 

路徑

-L/home/dimitriv/local/lib 

不added.Add它在你的化妝文件,然後檢查。

+0

好,我會檢查。但是不應該檢查LD_LIBRARY_PATH嗎? – user000001

+2

@ user828193只在運行時。 「LD_LIBRARY_PATH」變量僅在運行程序時由動態鏈接器使用。 – ydroneaud

+0

我找不到在哪裏更改Makefile,但我添加了標誌,從命令行運行它並且似乎工作。我會回來看看它有任何副作用。 – user000001

3

LD_LIBRARY_PATH包含加載程序(ld程序)使用的共享庫的路徑,以使程序執行。

在編譯期間,使用include目錄。在鏈接期間,需要對象庫。最後一個是你缺少的那種。

您可能需要安裝軟件包以獲取X11開發庫。在Linux上,該軟件包名爲libX11-devel。要安裝,

sudo yum install libX11-devel    # for Redhat, Fedora, etc. 

sudo apt-get install libX11-devel   # for Ubuntu, etc. 
+0

* devel *包需要提供'ld'正在尋找的'libX11.so'。 (注意:'libX11.so'通常是'libX11.so.6'的符號鏈接,而libX11.so.6又是符號鏈接到libX11.so.6.3.0庫的當前版本。請參閱'ldconfig' – ydroneaud

+0

不幸的是,我不能用yum安裝任何東西,因爲我不是一個sudoer。我從源碼安裝了'libX11-1.5.0'。我只能在軟件包中找到libX11-dev,你能指出我能找到它的來源嗎?還有@ydroneaud,你可以在上面的目錄中看到'libX11.so' ...可能'libX11-dev'畢竟是不需要的? – user000001