C 在何处更改LD_库路径

C 在何处更改LD_库路径,c,linux,gcc,compilation,C,Linux,Gcc,Compilation,我想把这些文件编译成可执行文件 //main.c #include <stdio.h> #include <mylib.h> int main(void){ call_hello_world(); return 0; } 但在第三步,我被绊倒了,因为它找不到我的“mylib.h”。我的教授说我需要更改'LD_LIBRARY_PATH',所以我尝试添加这个export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dev/shmMy.zsh

我想把这些文件编译成可执行文件

//main.c
#include <stdio.h>
#include <mylib.h>

int main(void){
  call_hello_world();
  return 0;
}

但在第三步,我被绊倒了,因为它找不到我的“mylib.h”。我的教授说我需要更改'LD_LIBRARY_PATH',所以我尝试添加这个
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dev/shm
My.zshrc,但它仍然不适合我。有什么建议吗?

这些是所需的命令:

gcc -c -I. -fPIC -o mylib.o mylib.c
gcc -shared -o libmylib.so mylib.o
gcc -c -I. -o main.o main.c
gcc -o hello main.o libmylib.so
然后在你的壳中:


export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/full/PATH/of/directory/containing/libmylib因此,您的方法存在几个问题

首先,像这样包含头文件和像那样包含头文件有区别

第一个选项通常用于包含标准库头文件,根据Linux上的设置,这些头文件应位于标准目录集中

后者是您可能希望使用的选项,因为它通常用于包含用户定义的头,并告诉预处理器在包含指令的文件目录中搜索。(见@quest49答案)

LD\u LIBRARY\u PATH
环境变量用于指示在查找标准目录集之前应首先搜索库的位置

因此,要编译
main.c
文件,并在将
#include
指令更改为
#include“mylib.h”
后,您需要执行以下操作之一:

  • 将include文件添加到
    main.c
    文件所在的目录中
  • 使用gcc的
    -I
    选项指示包含文件路径的位置

谢谢!我丢失的是
-I.
。LD\u LIBRARY\u路径包含搜索动态库的目录。你能接受这个解决方案吗?谢谢你发现了我的错误并告诉我如何改正!!如果您构建一个静态归档,那么您可以
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\u LIBRARY\u PATH
上浪费时间。
//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
gcc -c -I. -fPIC -o mylib.o mylib.c
gcc -shared -o libmylib.so mylib.o
gcc -c -I. -o main.o main.c
gcc -o hello main.o libmylib.so