Linux PHP编译make时出现错误libpthread.so.0: error adding symbols: DSO missing from command line的解决方案
不得不说,编译难度确实比较大,这个问题耗费了我接近两个小时,我现在查找了安装时的日志记录,发现了不少同样的错误,现将原因以及解决方案写出来。(日志记录3w6多行,可想而知多么的痛苦)。
configure:69932: cc -o conftest -I/usr/include -g -O2 -fvisibility=hidden -pthread -D_REENTRANT -L/usr/lib -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 conftest.c -lcrypt -lrt -lrt -lm -ldl -lpthread -lgcc -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lxml2 -lssl -lcrypto -lz -ljpeg -lfreetype -lonig -lsqlite3 -lxml2 -lxml2 -lcrypt >&5
/usr/bin/ld: /tmp/ccZcp7co.o: undefined reference to symbol '__res_nsearch@@GLIBC_2.2.5'
/usr/lib64/libresolv.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我想看的人一定眼睛花了,没错,谁看谁眼花。__res_nsearch这个是一个动态链接库,glibc_2.2.5,这个是glibc的一个库,glibc是一个总的c的运行库,@表示在glibc库内,倒数第二行是不能通过命令添加 libresolv.so.2这个文件的链接到__res_nsearch库,
最后一行给了一个退出的代码。第二第三行的内容你可以在Makefile这个文件内找到。我说的这个Makefile是PHP的源安装目录下的文件。我的路径是 /usr/local/src/php-7.4.6,执行过预安装 ./configure 命令后会出现该文件---Makefile。(预编译通过后才会有这个文件,切记!!!!!!!!)
第二第三行的内容是在Makefile文件的EXTRA_LIBS= 这一行下,在这一行末尾添加 -lresolv。问题解决了,世界清静了。
在其后想添加libpng这个图片解析功能,又遇到了类似的错误,仍然在EXTRA_LIBS= 这一行下添加 -lpng。也不报错了。
总结:修改makefile文件是关键,找到扩展libs也就是EXTRA_LIBS= 这一行,在末尾添加 -l 动态链接库名,库名就是'__res_nsearch@@GLIBC_2.2.5 第二个_前面的那一部分。
另外说一下,还需要给定环境变量。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libgd/lib:/usr/local/libpng/include:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
export PNG_LIBS=/usr/local/libpng/include
三个变量命令在编译前执行一下。
编辑 /etc/ld.so.conf 这个文件,将 /usr/local/lib /usr/lib64/ 这两个路径放在后面。基本不会在出什么问题了。类似的报错都可以这么处理。(也就是所有的动态链接库无法找到的问题,如果,环境变量三个命令执行了还不行,那就手动添加吧)
贴一下我的 EXTRA_LIBS