gcc链接选项-L:指定动态库路径的替代方法

gcc链接选项-L:指定动态库路径的替代方法,c,gcc,dynamic,linker,C,Gcc,Dynamic,Linker,如果我用“-L”编译源代码,可以找到动态库libmd5.so gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr 但是如果我不使用“-L.”选项,链接器将找不到动态库。我怎样才能在不调用“-L.”的情况下更改它 (附加信息libmd5.so和libmd5.so.1.0.1位于/home/user/ba中)您可以设置库路径环境变量 export LIBRARY_PATH=/home/user/ba -L标志实际上没有什么问题,所以您不应该太努力地去除它

如果我用“-L”编译源代码,可以找到动态库libmd5.so

gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr
但是如果我不使用“-L.”选项,链接器将找不到动态库。我怎样才能在不调用“-L.”的情况下更改它


(附加信息libmd5.so和libmd5.so.1.0.1位于/home/user/ba中)

您可以设置
库路径
环境变量

export LIBRARY_PATH=/home/user/ba

-L标志实际上没有什么问题,所以您不应该太努力地去除它-是不是在运行时您遇到了问题,因为系统不会加载您链接到的库?以下是一些选项:

  • 将/home/user/ba添加到/etc/ld.so.conf(或类似的操作系统),然后运行ldconfig。这将是全系统的
  • 设置LIBRARY_PATH(用于链接时间)和LD_LIBRARY_PATH(用于运行时)环境变量
    export-LD\u-LIBRARY\u-PATH=/home/user/ba
    export-LIBRARY\u-PATH=/home/user/ba
    。这仅对当前shell有效
  • 在可执行文件中设置rpath(不过这里仍然需要
    -L.
    )。将
    -L/home/user/ba-Wl、-rpath、/home/user/ba
    添加到链接器标志中。这将只对正在生成的可执行文件有效
  • 将共享库放在系统范围的库搜索路径中,如
    /usr/lib
    。这将是全系统的

上述内容在运行时也会起作用——当您运行应用程序时,它会尝试在/home/user/ba或系统的其他库搜索路径中查找libmd5.so

多谢各位。我真的不想摆脱它。但我不知道如何更改automake,以便在使用Anjuta编译项目时包含“-L.”。