linux /usr/bin/ld cannot find 解决

问题:
在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:

  • /usr/bin/ld: cannot find -lxxx


这些讯息会随着编译不同类型的source code 而有不同的结果出来如:

  • /usr/bin/ld: cannot find -lc
  • /usr/bin/ld: cannot find -lltdl
  • /usr/bin/ld: cannot find -lXtst


其中xxx即表示函式库文件名称,如上例的:libc.so、libltdl.so、libXtst.so。
其命名规则是:lib+库名(即xxx)+.so。


会发生这样的原因有以下三种情形:

1 系统没有安装相对应的lib
2 相对应的lib版本不对
3 lib(.so档)的symbolic link 不正确,没有连结到正确的函式库文件(.so)


对于上述三种原因有一篇文章写的很棒可参考这一篇文章的第4点:
gcc命令祥解


解决方法:
(1)先判断在/usr/lib 下的相对应的函式库文件(.so) 的symbolic link 是否正确
若不正确改成正确的连结目标即可解决问题。

(2)若不是symbolic link 的问题引起,而是系统缺少相对应的lib安装lib即可解决。

(3)如何安装缺少的lib:
以上面三个错误讯息为例:

错误1缺少libc的LIB
错误2缺少libltdl的LIB
错误3缺少libXtst的LIB 

 

  以Ubuntu为例:
  先搜寻相对应的LIB再进行安装的作业如:

  apt-cache search libc-dev
apt-cache search libltdl-dev 
apt-cache search libXtst-dev


实例:
在进行输入法gcin的Source Code的编译时出现以下的错误讯息:

/usr/bin/ld: cannot find -lXtst


经检查后发现是:
lib(.so档)的symbolic link 不正确

解决方法如下:

cd /usr/lib
ln -s libXtst.so.6 libXtst.so


如果在/usr/lib的目录下找不到libXtst.so 档,那么就表示系统没有安装libXtst的函式库。
解法如下:

apt-get install libxtst-dev

 

 

环境:vmware server + RHEL5.4 +fcitx3.63在执行make时遇到错误

[root@localhost  fcitx-3.6.3] make

make  all-recursive
make[1]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3'
Making all in doc
make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/doc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/doc'
Making all in xpm
make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/xpm'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/xpm'
Making all in lib
make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/lib'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/lib'
Making all in src
make[2]: Entering directory `/home/oracle/Desktop/fcitx-3.6.3/src'
gcc -O2 -fno-strength-reduce -g -O2   -D_ENABLE_TRAY    -Wall -lXpm -lXtst -lpthread  -o fcitx IC.o ime.o InputWindow.o KeyList.o main.o MainWindow.o MyErrorsHandlers.o punc.o py.o PYFA.o pyMapTable.o pyParser.o sp.o tools.o ui.o table.o xim.o qw.o tray.o TrayWindow.o DBus.o vk.o about.o QuickPhrase.o AutoEng.o extra.o internalVersion.o ImeRemote.o ../lib/libXimd.a -lX11
/usr/bin/ld: cannot find -lXtst
collect2: ld returned 1 exit status
make[2]: *** [fcitx] Error 1
make[2]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/oracle/Desktop/fcitx-3.6.3'
make: *** [all] Error 2

经过检查在目录  /usr/bin/ld下面没有发现lXtst

### 编译 HDF5 1.8.20 配置 C 编译器无法创建可执行文件的解决方案 当遇到 `configure` 报错提示 `C compiler cannot create executables` 的情况时,通常是因为环境配置不正确或者缺少必要的依赖项。以下是可能的原因以及对应的解决方法: #### 可能原因分析 1. **编译工具链未安装或不可用** 如果系统的 GCC 或其他 C/C++ 编译器未正确安装,则可能导致此错误。可以通过运行命令 `gcc --version` 来验证是否存在可用的编译器[^1]。 2. **权限不足** 当尝试写入临时目录或其他受限区域时,可能会因权限不足而失败。可以检查当前用户的权限设置并调整相应路径的访问权。 3. **动态链接库路径缺失** 如引用中提到的情况,在使用特定版本的头文件和库时(例如 FLANN 中使用的 HDF5 头文件),如果服务器上的默认版本与所需版本不符,则需手动指定正确的动态库路径。 4. **环境变量配置不当** 环境变量如 `LD_LIBRARY_PATH`, `LIBRARY_PATH`, 和 `CPATH` 若未正确定义也可能引发此类问题。这些变量应指向所需的头文件和共享库位置。 #### 解决方案步骤说明 ##### 方法一:确认编译器状态 确保已安装 GNU Compiler Collection (GCC),并通过以下方式测试其功能: ```bash echo 'int main(){}' > test.c && gcc -o /dev/null test.c ``` 若上述操作成功完成无误,则表明基础构建环境正常;反之则需要重新安装或修复开发套件。 ##### 方法二:设定自定义库查找途径 针对不同操作系统平台,采用适当的方法来告知系统如何定位到非标准位置下的资源文件夹。对于 Linux 平台而言,主要涉及以下几个方面: - 设置 LD_LIBRARY_PATH 让加载程序能够发现新的.so 文件; - 修改 LIBRARY_PATH 告诉连接阶段去哪里寻找静态档案(.a)形式的目标模块; - 利用 CPATH 参数指导预处理器找到额外包含指令所指代的内容所在之处。 具体实现如下所示: ```bash export LD_LIBRARY_PATH=/path/to/hdf5/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=/path/to/hdf5/lib:$LIBRARY_PATH export CPATH=/path/to/hdf5/include:$CPATH ./configure ... make ``` 这里 `/path/to/hdf5/...` 应替换为你实际解压出来的 hdf5 软件包根目录下对应子目录名称。 ##### 方法三:利用 LDFLAGS 和 CPPFLAGS 显式声明参数 另一种更为精确控制的方式是在调用 ./configure 脚本之前预先定义好相应的标志位选项,这样可以直接嵌入至后续整个构建流程当中去应用它们。 ```bash LDFLAGS="-L/path/to/hdf5/lib" \ CPPFLAGS="-I/path/to/hdf5/include" \ ./configure ... ``` 通过这种方式不仅可以规避潜在冲突风险而且还能提高移植性和兼容性表现效果更好一些。 --- ### 示例代码片段展示 下面给出一段简单的 Makefile 片段用于演示如何集成外部第三方组件进入项目工程之中: ```Makefile CC=gcc CXX=g++ PREFIX=/usr/local INC=-I$(PREFIX)/include LIB=-L$(PREFIX)/lib -lhdf5 TARGET=example_program all: $(TARGET) $(TARGET): *.c $(CC) $^ -o $@ $(INC) $(LIB) clean: rm -f *.o $(TARGET) ``` ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值