我的環境是Ubuntu 14 32bits。
我寫了三個分別稱爲main.c,foo.c和bar.c的c文件。
代碼非常簡單。
第一個源代碼是main.c中
我無法運行ELF格式的程序。shell告訴我沒有這樣的文件或目錄
#include<stdio.h>
extern void foo();
int main(){
foo();
return 0;
}
第二源代碼的foo.c
#include<stdio.h>
void foo(){
printf("Hi,I am foo.");
bar();
}
最後一個是bar.c
#include<stdio.h>
void bar(){
printf("Hi,I am bar.");
}
所有上面的文件將被放入同一個名爲test的文件夾中。
(其絕對路徑爲/ home /插孔/桌面/測試)
然後我發出命令:
$ gcc -fPIC -shared -Wl,-soname,libbar.so.1 -o libbar.so.1.0.0 bar.c
$ ln -s libbar.so.1.0.0 libbar.so
$ gcc -fPIC -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0.0 foo.c -lbar -L.
$ ln -s libfoo.so.1.0.0 libfoo.so
$ gcc -c main.c
$ ld -rpath /home/jack/Desktop/test -e main -o main main.o -L. -lfoo -lbar
然後我跑稱爲主可執行文件。
$./main
但外殼下面返回
bash的字符串:./main:沒有這樣的文件或目錄。
但是主文件確實存在於當前目錄中。
爲什麼?
@SantoshA'gcc -c main.c'不會生成'a.out'。它根本不會生成任何可執行文件。它只編譯源文件'main.c'並生成目標文件'main.o'。 – axiac
您需要鏈接'crt0.o'和其他東西。 'gcc'正在爲你做這件事。使用'gcc -v'來理解正在發生的事情。 –
@newbie:請**編輯您的問題**以激勵它。 **爲什麼你這樣做**,爲什麼不使用'gcc'來編譯和鏈接你的程序? –