/usr/lib/libpthread.so:没有这样的文件或目录&& /usr/lib/libm.so:没有解决这样的文件或目录

时间:2012-12-28 22:13:11

标签: linux gcc makefile centos

解决了sudo ln -s /usr/lib64/libm.so /libln -s /usr/lib64/libpthread.so /lib

libm.so位于以下目录中:/usr/lib64/libm.so libpthread在这个目录中:/usr/lib64/libpthread.so

我尝试ln -s /usr/lib/libthread.so /lib64/libpthread.so并出现同样的错误,机器是否需要重启?

我在使用Centos 6.3在C中创建客户端OPENDMTP时遇到问题

我的源文件:https://sourceforge.net/projects/opendmtp/files/client-c/1.2.3/

我安装了:yum groupinstall "Development Tools"

我尝试安装所需的库,但它们已经安装。

尝试:"make dest=linux dmtp"我得到了下一个:

[root@localhost OpenDMTP_client-c_1.2.0]# make dest=linux dmtp

Make tools dirs ...
/bin/mkdir -p ./build_lin/obj
/bin/mkdir -p ./build_lin/obj/tools
/bin/mkdir -p ./build_lin/obj/lib


Make './build_lin/obj/lib/libtools.a' ...
ar rc ./build_lin/obj/lib/libtools.a ./build_lin/obj/tools/checksum.o ./build_lin/obj/tools/base64.o ./build_lin/obj/tools/bintools.o ./build_lin/obj/tools/buffer.o ./build_lin/obj/tools/gpstools.o ./build_lin/obj/tools/strtools.o ./build_lin/obj/tools/utctools.o ./build_lin/obj/tools/threads.o ./build_lin/obj/tools/sockets.o ./build_lin/obj/tools/io.o ./build_lin/obj/tools/comport.o ./build_lin/obj/tools/random.o
ranlib ./build_lin/obj/lib/libtools.a

Make module dirs ...
/bin/mkdir -p ./build_lin/obj
/bin/mkdir -p ./build_lin/obj/modules
/bin/mkdir -p ./build_lin/obj/lib


Make './build_lin/obj/lib/libmodule.a' ...
ar rc ./build_lin/obj/lib/libmodule.a ./build_lin/obj/modules/odometer.o ./build_lin/obj/modules/motion.o ./build_lin/obj/modules/geozone.o
ranlib ./build_lin/obj/lib/libmodule.a

Make base dirs ...
/bin/mkdir -p ./build_lin/obj
/bin/mkdir -p ./build_lin/obj/base
/bin/mkdir -p ./build_lin/obj/lib


Make './build_lin/obj/lib/libbase.a' ...
ar rc ./build_lin/obj/lib/libbase.a ./build_lin/obj/base/mainloop.o ./build_lin/obj/base/propman.o ./build_lin/obj/base/event.o ./build_lin/obj/base/events.o ./build_lin/obj/base/packet.o ./build_lin/obj/base/pqueue.o ./build_lin/obj/base/protocol.o ./build_lin/obj/base/accting.o ./build_lin/obj/base/upload.o
ranlib ./build_lin/obj/lib/libbase.a
make dest=linux XPORT_MEDIA=-DTRANSPORT_MEDIA_SOCKET -f src/custom/custom.mk dmtpd_all
make[1]: Entering directory `/home/centos/Downloads/OpenDMTP_client-c_1.2.0'

Making sample DMTP reference implementation ...

Make dmtp object dirs ...
/bin/mkdir -p ./build_lin/obj/custom
/bin/mkdir -p ./build_lin/obj/custom/linux
/bin/mkdir -p ./build_lin/obj/custom/modules
/bin/mkdir -p ./build_lin/obj/dmtp


Linking 'dmtpd' ...
cc -o ./build_lin/obj/dmtp/dmtpd -Wall -DTARGET_LINUX -DTRANSPORT_MEDIA_SOCKET -DPROTOCOL_THREAD -DGPS_THREAD -Isrc /usr/lib/libpthread.so /usr/lib/libm.so ./build_lin/obj/custom/startup.o ./build_lin/obj/custom/transport.o ./build_lin/obj/custom/log.o ./build_lin/obj/custom/gps.o ./build_lin/obj/custom/gpsmods.o ./build_lin/obj/custom/linux/os.o -L./build_lin/obj/lib -lmodule -lbase -ltools
cc: /usr/lib/libpthread.so: No such file or directory
cc: /usr/lib/libm.so: No such file or directory
make[1]: *** [dmtpd_exe] Error 1
make[1]: Leaving directory `/home/centos/Downloads/OpenDMTP_client-c_1.2.0'
make: *** [dmtp_socket] Error 2

1 个答案:

答案 0 :(得分:0)

从您链接到的档案中,我在第54行的/OpenDMTP_client-c_1.2.3/make/common.mk中看到:

 SOLIBS    = $(LINUX_LIBS)/libpthread.so $(LINUX_LIBS)/libm.so

这是一种在Linux上提供这些库的奇怪方法,并且不太可行。它们是特殊的系统库,不存在于可预测的位置。指定它们的常规方法是使用-lm和-pthread(不含l)。

快速编辑/OpenDMTP_client-c_1.2.3/make/common.mk hack并用以下代码替换第54行:

 SOLIBS    =

并将第82行修改为:

 ALIBS       = -L$(LIB_DIR) -lmodule -lbase -ltools -lm -pthread

应该解决问题。虽然我不确定对其他平台的影响。