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

问题描述

使用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'

解决方案

编译C++程序遇到错误:undefined reference to *::*</a><br/><a target='_blank' rel='nofollow' href='http://blog.csdn.net/woshidahuaidan2011/article/details/47184821'>错误提示:连接 built-in.o 提示 undefined reference to</a><br/><a target='_blank' rel='nofollow' href='http://blog.csdn.net/zhouzhuan2008/article/details/41350945'>编译报undefined reference to__aeabi_uldivmod'错误

时间: 2024-09-08 07:31:27

linux-使用tcl8.6共享库,遇到错误提示undefined reference to的相关文章

Linux系统共享库编程

一.说明 类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用.Windows中为*.dll,而Linux中为*.so.下面详细介绍如何创建.使用Linux的共享库. 二.创建共享库 在mytestso.c文件中,代码如下: #include <stdio.h> #include <stdlib.h> int GetMax(int a, int b) { if (a >= b) return a; return b; } int GetInt(

【原创】Linux下共享库嵌套依赖问题

问题场景:  动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 libevent_pthreads.so : 可执行程序 sa 依赖动态库 librabbitmq_r.so ; 在链接生成 sa 的时候希望只指定 librabbitmq_r.so 而不指定 libevent_core.so 和 libevent_pthreads.so . 错误信息:  ... g++ ../source/authorisecfg.o ../source/bmcins

linux使用gcc编译c语言共享库步骤_C 语言

对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例如一个数据库服务器的接口,就像MySQL. 大部分大型的软件项目都会包含若干组件,其中一些你发现可以用在其他项目中,又或者你仅仅出于组织目的将不同组件分离出来.当你有一套可复用的并且逻辑清晰的函数时,将其构建为一个库会十分有用,这样你就不将这些源代码拷贝到你的源代码中,而且每次都要再次编译它们.除此之外,你还可以保证你的程序各模块隔离,这

Linux静态库和共享库【转】

转自:http://www.cnblogs.com/zlcxbb/p/6806269.html 1.什么是静态库 静态库类似windows中的静态lib 关于windows中的静态lib,可参考 Windows动态链接库DLL  特点:包含函数代码声明和实现,链接后所有代码都嵌入到宿主程序中. 只在编译时使用,执行时不再需要该静态库. 2.静态库编写示例如下:addvec.c void addvec(int* x, int* y, int*z, int n) { int i=0; for(; i

linux 静态库、共享库

一.什么是库   本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的.   Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.Linux系统有几个重要的目录存放相应的函数库,如/lib    /usr/lib.   二.静态函数库.动态函数库   A.  这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都被整合进目标代码中,他的优点就显而易见了

Linux下动态共享库 连接和加载路径

1. 连接时找不到某一个函数,出现" xxxxx undefined",应该就是连接时找不到相应的动态库,连接时动态库的路径如下: 1> 默认路径是:/lib, /usr/lib/, /usr/local/lib 2> -L: 指定连接时动态库的路径 3> LD_LIBRARY_PATH: 指定连接路径 2. 运行应用程序时出现"error<wbr>while loading shared libraries",则是加载时找不到相应的动

linux系统 动态共享库-动态共享库加载到内存中,怎样才能保证只有一份副本

问题描述 动态共享库加载到内存中,怎样才能保证只有一份副本 这几天一直在看关于动态共享库的知识,但看到一个地方,就不懂了,在网上搜索了一下!也没有找到答案!希望有哪位高手,帮小弟解答一下,小弟不胜感激! 问题:动态共享库,顾名思义,可以在多个进程间,进行共享!在系统中只保存一份副本,现在假设Process A已经将Lib A Load到物理内存,但当同样共享Lib A的Process B开始运行时,它是如何知道Lib A已经被加载到内存中,且如何找到这块物理内存?

Linux系统下安装PCRE及配置共享库教程

PCRE(Perl Compatible Regular Expressions)是一个轻量级的Perl函数库,包括 perl 兼容的正则表达式库.它比Boost之类的正则表达式库小得多.PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则表达式库. 安装PCRE 1. PCRE目前最新版本为8.36,可以点这里进行下载. 2. 使用tar -zxvf pcre-8.36.tar.gz进行解压. 3. 运行 chmod -R 777 /pcre-8.36 对当前文

静态库和共享库制作

1静态库和共享库 *本节就如何创建和使用程序库进行论述.所谓"程序库",简单说,就是包含了数据 和执行码的文件.其不能单独执行,可以作为其它执行程序的一部分来完成某些功能.库的 存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便 于升级.程序库可分静态库(static library)和共享库(shared object).   A:静态库 是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分:共享库,是在 执行程序启动时加载到执行程序中,可以被