首页 > 解决方案 > 设置 LD_LIBRARY_PATH 在 bash 中没有任何影响,为什么?

问题描述

我做了一个最简单的可重现问题。(ubuntu 20.04 bash)

ckim@ckim-ubuntu:~/testdir/testbashenv$ ls
doit  env.sh  go.sh  hello.c  hello.o  libhello.so  test.c
ckim@ckim-ubuntu:~/testdir/testbashenv$ cat hello.c
#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}
ckim@ckim-ubuntu:~/testdir/testbashenv$ cat test.c
#include <dlfcn.h>
extern void hello();
void *g_hello_handle;
typedef void (*hello_ptr_t)();
hello_ptr_t hello_ptr;
int main()
{
    g_hello_handle = dlopen("libhello.so", RTLD_LAZY);
    hello_ptr = dlsym(g_hello_handle, "hello");
    hello_ptr();
    return 0;
}
ckim@ckim-ubuntu:~/testdir/testbashenv$ cat env.sh
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PWD}
ckim@ckim-ubuntu:~/testdir/testbashenv$ source env.sh
ckim@ckim-ubuntu:~/testdir/testbashenv$ echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/local/lib::/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:/home/ckim/testdir/testbashenv
ckim@ckim-ubuntu:~/testdir/testbashenv$ gcc -c -fPIC hello.c -o hello.o
ckim@ckim-ubuntu:~/testdir/testbashenv$ gcc hello.o -shared -o libhello.so
ckim@ckim-ubuntu:~/testdir/testbashenv$ gcc test.c -ldl -lhello -o test
/usr/bin/ld: cannot find -lhello
collect2: error: ld returned 1 exit status
ckim@ckim-ubuntu:~/testdir/testbashenv$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib::/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:/home/ckim/testdir/testbashenv
ckim@ckim-ubuntu:~/testdir/testbashenv$ gcc test.c -ldl -lhello -o test
/usr/bin/ld: cannot find -lhello
collect2: error: ld returned 1 exit status
ckim@ckim-ubuntu:~/testdir/testbashenv$ gcc test.c -ldl -L/home/ckim/testdir/testbashenv -lhello -o test
ckim@ckim-ubuntu:~/testdir/testbashenv$ ./test
Hello world!

为什么设置 LD_LIBRARY_PATH 没有任何效果?

ADD:LD_LIBRARY_PATH设置没有问题,只是dos-unix文件不同。

标签: bashlinkerenvironment-variables

解决方案


推荐阅读