php7 编译 collect2: error: ld returned 1 exit status

本文解决在编译PHP7时遇到的与LDAP扩展相关的链接错误,具体为未定义符号‘ber_strdup’的问题。通过修改Makefile,在EXTRA_LIBS行末添加-llber参数,成功解决了编译过程中的链接失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

今天在编译PHP7是抛出一下错误提示:

/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol ‘ber_strdup’
/usr/bin/ld:note: ‘ber_strdup’ is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line
/lib64/liblber-2.4.so.2:could not read symbols: Invalid operation
collect2:error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

解决办法

在PHP源码目录下 vi Makefile 打开文件,找到 EXTRA_LIBS 行,在行末添加 -llber 保存退出再次make即可

### 解决编译时链接器错误 `collect2 error ld returned 1 exit status` 当遇到`collect2 error ld returned 1 exit status`这一提示时,实际上表明在链接阶段遇到了问题。此消息通常意味着在此之前已经发生了其他的编译或链接错误[^1]。 #### 错误定位 为了有效解决问题,应当关注该错误信息前的其他警告或错误信息。这些前置的信息往往能更直接地指出实际发生的问题所在。例如,在某些情况下可能是由于拼写错误导致未定义的函数引用,如将“myFree”误写作“myfree”。这种细微差别容易被忽视却可能导致严重的编译失败[^2]。 #### 常见原因及解决方法 - **缺失依赖库**:如果项目依赖于外部库,则需确认所有必要的静态或动态库都已被正确指定并存在路径中。 - **重复定义符号**:检查是否存在多个同名全局变量或函数声明,特别是在多文件项目里这种情况较为普遍。 - **缺少头文件**:确保所有的`.h`或其他形式的接口描述文件已经被包含进来,以便让编译器知道所需的数据结构和原型声明。 - **目标平台不匹配**:对于跨平台开发而言,还需注意不同操作系统下二进制兼容性问题以及相应的配置选项设置不当所带来的影响。 #### 实际操作建议 针对具体实例中的Qt工程案例,可以通过调整CMakeLists.txt来修正源文件列表: ```cmake set(project_SOURCES main.cpp imu.cpp imu_block.cpp pcap_reader.cpp) ``` 而对于Apache HTTP服务器从源码构建过程中遭遇相同类型的链接失误,则可能是因为APR(Apache Portable Runtime)组件未能正常安装完成所致。此时应按照官方文档指导顺序执行如下命令序列以确保各部分都能顺利组装在一起: ```bash cd apr-1.7.4/ ./configure --prefix=/usr/local/apr make && make install ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dadeity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值