Linux下面的編譯和連線

2021-04-16 09:28:00 字數 803 閱讀 4681

編譯和連線:

編譯通常是對單個原始檔進行編譯成.o檔案;

要加上-c選項,比如 gcc -o aa.o -c aa.cpp

否則會提示找不到main函式;因為有些模組只是提供單元函式;並沒有main函式;

編譯只檢查基本語法,對於引用的外部函式,只用能找到其宣告就可以正確編譯通過,比如在cpp檔案中包含了引用的外部庫函式的標頭檔案等.

連線是指把先前編譯出來的.o連線成可執行的檔案;這時候ld就要找到所有函式和變數的定義和實現;如果引用了外部庫函式就要在連線的時候制定要連線的庫.這樣ld就可以到相應的庫裡面找到cpp中用到的函式.

連線還有一種情況就是把幾個.o連線成乙個so動態庫;

這時候ld也不尋找那些引用的外部庫函式;只是簡單的連線;

比如要把a.o ,b.o 連線成乙個libab.so動態庫,其中a.o中用了第三方庫libthird.so中的函式;在連線時要用選項-g(solaris下面)活著-shared(linux下面)以表明這是在生成乙個庫,而不是最終目標;這樣ld就不會去檢查應用的外部函式是否能找到:gcc -g -o libab.so a.o b.o

如果寫成:gcc -o libab.so a.o b.o,連線的時候就會認為要生成最終目標libab.so,從而會去找a.o中用到的第三方庫;如果找不到就報錯.

所以在連線成最終目標的時候要加入連線選項 -lthird

如果乙個程式用了上面說的libab.so中的函式,那麼在生成最終目標程式時一定要加入這個連線庫-lab;而因為libab.so又用到了libthird.so,所以也一定要加入-lthird;否則會提示libab.so中一些符號未定義.

windows連線linux下面的軟體亂碼

亂碼問題 windows中的編碼格式和linux中的編碼格式是不同的。在linux中編寫的 如果包含中文,到windows會變成亂碼。linux中支援中文字元。yum install font config devel yum install fonts chinese 可能是apache不支援字型...

Solyog連線ubuntu下面的mysql

1 關閉ubuntu下面的防火牆 ufw disable 檢視防火牆的狀態 ufw status 2 開放埠號 iptables l n 檢視開放的埠 iptables a input p tcp dport 3306 j accept 3 在mysql中檢視系統使用者對應的認證外掛程式 4 將ro...

linux下面的軟體選擇

我自己用的一些linux軟體,就想起來這些,以後用什麼了再新增。1.瀏覽器 firefox 3.bbs客戶端 qterm 4.查詞 stardict 5.ftp客戶端 kftpgrabber lftp 6.bt客戶端 tran ission 8.中文輸入法 scim python 10.qq客戶端 ...