在linux上编译、运行C程序,请帮忙

时间:2021-10-19 17:46:14
在/home/ljt/yj/mdbtools-0.4/src/libmdb/.libs中有以下文件:
[ljt@market .libs]$ ls -l
total 504
-rw-rw-r--    1 ljt      ljt        396944 Aug 20 10:15 libmdb.a
lrwxrwxrwx    1 ljt      ljt            12 Aug 20 10:15 libmdb.la -> ../libmdb.la
-rw-rw-r--    1 ljt      ljt           722 Aug 20 10:15 libmdb.lai
lrwxrwxrwx    1 ljt      ljt            15 Aug 20 10:15 libmdb.so -> libmdb.so.0.0.0
lrwxrwxrwx    1 ljt      ljt            15 Aug 20 10:15 libmdb.so.0 -> libmdb.so.0.0.0
-rwxrwxr-x    1 ljt      ljt        104412 Aug 20 10:15 libmdb.so.0.0.0



我用这个命令编译:
[ljt@market mdb_pro]$ gcc me_mdb-array.c -I/usr/lib/glib/include -L/ljt/yj/mdbtools-0.4/src/libmdb/.libs -lmdb

会产生一个a.out的文件。

然后运行./a.out回车,会提示:
[ljt@market mdb_pro]$ ./a.out
./a.out: error in loading shared libraries: libmdb.so.0: cannot open shared object file: No such file or directory



这是怎么回事,如何编译,请帮忙!谢谢!

12 个解决方案

#1


把那个libmdb.so.0.0拷成libmdb.so试试.

#2


猜测,编译中不能调用链接目标
直接拷成一个libmdb.so.0,而不是一个链接文件。

#3


你把libmdb.so删除就行了,原因是编译器默认链接动态库,而运行时却找不到动态库,如果把libmdb.so删除编译器会链接静态库,则不会找不到。

#4


把libmdb.so所在目录加入到 LD_LIBRARY_PATH 的环境变量中。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/ljt/yj/mdbtools-0.4/src/libmdb/.libs
export LD_LIBRARY_PATH

#5


同意Francky(寒星)

#6


试过没,结果如何?

#7


直接拷贝一个libmdb.so.0好像不行,我没试通

删除libmdb.so也不通。

至于Francky(寒星) 所说的我不知道怎么做,还往赐教。


我现在将mdbtools的库安装到/usr/local上去了,还是不行,这样编译:
gcc me_mdb-array.c -I/usr/lib/glib/include -lmdb

运行a.out结果还是那样:
./a.out: error in loading shared libraries: libmdb.so.0: cannot open shared object file: No such file or directory

晴帮忙,谢谢!

#8


这样试一下:在/usr/lib下建2个符号链接到 home/ljt/yj/mdbtools-0.4/src/libmdb/.libs 下面的libmdb.a和libmdb.so.0.0.0
这样可以不用加LIBRARY_PATH

#9


怀疑代码有问题
长吗?
贴出来可以吗?

#10


在你home目录下,编辑你的配置文件(如果你用的ksh则是.profile文件,用csh则是.login文件),在配置文件中加入Francky(寒星)所说的那句。然后运行该配置文件或重新登陆就可以。

#11



嗬嗬,可以了

安装libmdb库,系统将它安装到/usr/local中去了,在/usr/local/include和/use/local/lib目录下分别有头文件和前面所讲的库文件。

这是用以下命令可以成功编译:
gcc me_mdb-array.c -I/usr/lib/glib/include -lmdb

并生成a.out文件。但是运行时出现:
./a.out: error in loading shared libraries: libmdb.so.0: cannot open shared object file: No such file or directory


接着我将libmdb.so.0拷贝到/use/lib目录中,(不是连接文件),再运行a.out,就可以运行了。

谁能告诉我为什么?xiexie

#12


因为你的程序使用的是共享连接库。所以在程序加载运行时要找到libmdb.so.0进行装配。 搜索LD_LIBRARY_PATH环境变量配置的目录查找lib.

#1


把那个libmdb.so.0.0拷成libmdb.so试试.

#2


猜测,编译中不能调用链接目标
直接拷成一个libmdb.so.0,而不是一个链接文件。

#3


你把libmdb.so删除就行了,原因是编译器默认链接动态库,而运行时却找不到动态库,如果把libmdb.so删除编译器会链接静态库,则不会找不到。

#4


把libmdb.so所在目录加入到 LD_LIBRARY_PATH 的环境变量中。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/ljt/yj/mdbtools-0.4/src/libmdb/.libs
export LD_LIBRARY_PATH

#5


同意Francky(寒星)

#6


试过没,结果如何?

#7


直接拷贝一个libmdb.so.0好像不行,我没试通

删除libmdb.so也不通。

至于Francky(寒星) 所说的我不知道怎么做,还往赐教。


我现在将mdbtools的库安装到/usr/local上去了,还是不行,这样编译:
gcc me_mdb-array.c -I/usr/lib/glib/include -lmdb

运行a.out结果还是那样:
./a.out: error in loading shared libraries: libmdb.so.0: cannot open shared object file: No such file or directory

晴帮忙,谢谢!

#8


这样试一下:在/usr/lib下建2个符号链接到 home/ljt/yj/mdbtools-0.4/src/libmdb/.libs 下面的libmdb.a和libmdb.so.0.0.0
这样可以不用加LIBRARY_PATH

#9


怀疑代码有问题
长吗?
贴出来可以吗?

#10


在你home目录下,编辑你的配置文件(如果你用的ksh则是.profile文件,用csh则是.login文件),在配置文件中加入Francky(寒星)所说的那句。然后运行该配置文件或重新登陆就可以。

#11



嗬嗬,可以了

安装libmdb库,系统将它安装到/usr/local中去了,在/usr/local/include和/use/local/lib目录下分别有头文件和前面所讲的库文件。

这是用以下命令可以成功编译:
gcc me_mdb-array.c -I/usr/lib/glib/include -lmdb

并生成a.out文件。但是运行时出现:
./a.out: error in loading shared libraries: libmdb.so.0: cannot open shared object file: No such file or directory


接着我将libmdb.so.0拷贝到/use/lib目录中,(不是连接文件),再运行a.out,就可以运行了。

谁能告诉我为什么?xiexie

#12


因为你的程序使用的是共享连接库。所以在程序加载运行时要找到libmdb.so.0进行装配。 搜索LD_LIBRARY_PATH环境变量配置的目录查找lib.