【发布时间】:2019-12-27 09:25:05
【问题描述】:
我想把这些文件编译成可执行文件。
//main.c
#include <stdio.h>
#include <mylib.h>
int main(void){
call_hello_world();
return 0;
}
//mylib.h
void call_hello_world(void);
//mylib.c
#include <mylib.h>
#include <stdio.h>
void call_hello_world( void ) {
printf( ”Hello world!” );
}
我试过了
gcc -c -I. -fPIC -o mylib.o mylib.c
gcc -shared -o libmylib.so mylib.o
gcc -c -o main.o main.c
gcc -o hello main.o -L. -lmylib
但是在第三步,我被卡住了,因为它找不到我的 'mylib.h'。我的教授说我需要更改 'LD_LIBRARY_PATH' 所以我尝试添加这个 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dev/shm 我的 .zshrc 但它仍然对我不起作用。有什么建议我应该怎么做?
【问题讨论】:
-
如果你建立一个静态存档,那么你可以
gcc -o hello main.o -L. -l:libmylib.a。您不必担心 Linux 路径问题。另一种可能性是gcc -o hello main.o -L. -lmylib -Wl,--enable-new-dtags -Wl,-R,'$ORIGIN/.'。它也将避免 Linux 路径问题,但您需要将库与可执行文件保存在同一目录中。在这两种情况下,您都不需要在LD_LIBRARY_PATH上浪费时间。
标签: c linux gcc compilation