比特星 2015-11-18 02:05 采纳率: 0%
浏览 2059

使用tcl8.6共享库,遇到错误提示undefined reference to

项目中用到了tcl8.6的共享库,把tcl的源码下载后在ubuntu上将tcl的库编译出来了。但是在编译项目的时候总是报未定义引用的错误,我检查了自己编译出来的libtcl8.6.so,这个共享库中是有tclStringType的定义的,也检查了声明tclStringType的头文件,编译tcl共享库时的头文件与编译项目时的头文件是一致的。

以下是共享库符号检查和编译的结果,跪求武林高手出手相帮,不胜感激!

nm -l /home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686/liboms_shr.so|grep tclStringType
U tclStringType

nm -l /usr/lib/i386-linux-gnu/libtcl8.6.so|grep tclStringType
001a1034 d tclStringType

gcc -g -o /home/water/Documents/eaf/kit/test/bin/Linux_3.19.0_i686/TableDump Linux_3.19.0_i686/TableDump.o -L/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686 -loms0_shr -L/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686 -loms_shr -L/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686 -lstub -L/usr/lib/i386-linux-gnu -ltcl8.6 -L/usr/lib/i386-linux-gnu -lpthread -L/usr/lib/i386-linux-gnu -lresolv -L/usr/lib/i386-linux-gnu -lm -L/usr/lib/i386-linux-gnu -lc -Xlinker --rpath-link -Xlinker /home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686
/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686/liboms_shr.so: undefined reference to tclEmptyStringRep'
/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686/liboms_shr.so: undefined reference to
tclStringType'
/home/water/Documents/eaf/kit/test/lib/Linux_3.19.0_i686/liboms_shr.so: undefined reference to `tclFreeObjList'

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 19:38
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在编译Linux应用程序时,没有正确地设置LD_LIBRARY_PATH环境变量导致的。你可以按照以下步骤解决这个问题:

    1. 打开终端并输入以下命令以查看当前的LD_LIBRARY_PATH值:

      export LD_LIBRARY_PATH
      
    2. 确保你已经设置了LD_LIBRARY_PATH变量。如果还没有,请按下面的步骤添加它:

      a. 如果你的程序位于/usr/local/lib目录下,则在/etc/ld.so.conf文件中添加路径。

      b. 如果你的程序位于/usr/lib目录下,则在/etc/ld.so.conf文件中添加路径,并运行以下命令使修改生效:

      ```bash
      ldconfig
      ```
      
    3. 将LD_LIBRARY_PATH变量的值更改为包含你的共享库的路径。例如,如果你的共享库位于/usr/lib/x86_64-linux-gnu/tcl目录下,你可以这样设置:

      ```bash
      export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu/tcl:$LD_LIBRARY_PATH
      ```
      
    4. 运行以下命令来重新加载LD_LIBRARY_PATH变量:

      source ~/.bashrc
      
    5. 最后,重新构建你的应用程序。你应该可以在make命令中看到成功的信息。

    6. 保存这些更改并退出终端。

    现在,你的应用程序应该能够正确地链接到共享库,并且不会出现“undefined reference to”错误。

    评论

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境