我試圖編譯在Linux的簡單cprogram與共享庫編譯一個cprogram在Linux中使用共享庫
我都在同一個文件夾中。
我有TE下列文件:
mymain.c
#include "myclib.h"
int main() {
func();
return 0;
}
myclib.h
void func();
myclib.c
然後我遵循下列步驟:
GCC -c子卡myclib.c(創建memoryaddress獨立objectfile)
其產生:myclib.o
GCC -shared -fPIC -o libmyclib.so myclib.o(創建共享庫)
gcc -c mymain.c(在main.c中創建目標文件)
到目前爲止好 - 然後我有以下文件準備就緒:
main.o libmyclib.so
,所以我嘗試創建一個程序出這個語法:
gcc -o program -lmyclib -L。 mymain.o
(我猜從libmyclib前綴lib應該有l替代?)
但我從GC-編譯器錯誤消息:
*mymain.o: In function `main':
mymain.c:(.text+0xa): undefined reference to `func'
collect2: error: ld returned 1 exit status*
我有作爲經過充分測試的語法如下:
gcc -o program mymain.c -L -lmyclib -Wl,-rpath ,.
然後我得到以下錯誤:
/usr/bin/ld: cannot find -lmyclib.so
collect2: error: ld returned 1 exit status
所以我的問題 - 我到底在這兩種實現做錯了什麼? 如何使用共享庫將此程序編譯爲可執行文件?
在此先感謝
變化'gcc的-o程序-lmyclib -L。 mymain.o'到'gcc -o program mymain.o -lmyclib -L.' –
@PaulR'-k'選項需要最後一個。 – fuz
@FUZxxl:我不這麼認爲(假設你的意思是'-L'?) - 參見:http://stackoverflow.com/questions/5817269/does-the-order-of-l-and-l-options -in-the-gnu-linker-matter –