首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ubuntu gcc编译时’xxxx’未定义引用问题

http://www.cnblogs.com/oloroso/p/4688426.html gcc编译时’xxxx’未定义引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译时候有时候会碰到这样问题...本文由乌合之众 lym瞎编,欢迎转载blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso 例如: g++ -o spider...dso.o:在函数‘dso_load(char const*, char const*)’中: dso.cpp:(.text+0x3c):‘dlopen’未定义引用 dso.cpp:(.text+0x4c...):‘dlsym’未定义引用 dso.cpp:(.text+0xb5):‘dlerror’未定义引用 dso.cpp:(.text+0x13e):‘dlclose’未定义引用 原因 出现这种情况原因...但是在链接为可执行文件时候就必须要具体实现了。如果错误是未声明引用,那就是找不到函数原型,解决办法这里就不细致说了,通常是相关头文件未包含。

7.6K20

第5章 | 引用,使用引用引用安全

5.1 引用 假设我们要创建一张表格,列出文艺复兴时期某一特定类型艺术家和他们作品。...但是,一旦一个值拥有了可变引用,就无法再该值创建其他任何种类引用了。表达式 &mut e 会产生一个 e 值可变引用,可以将其类型写成 &mut T,读作“ref mute T”。...迭代中向量共享引用就是其元素共享引用,因此 work 现在是 &String。此函数任何地方都没有发生过所有权转移,它只会传递非拥有型引用。...5.3.4 返回引用 函数通常会接收某个数据结构引用,然后返回该结构某个部分引用。... y 引用会保留在 s 中,它会在 y 之前超出作用域。 x 引用最终会出现在 r 中,它生命周期不会超出 x。

5110
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 链接库顺序导致符号未定义问题

符号未定义是链接过程中常见问题,有时候很明显,有时候却很隐晦,比如链接库顺序导致符号未定义问题。...问题描述使用 gcc/g++ 编译一个项目的时候,出现了未定义符号,符号来源于一个开源库,确认了库位置,库中符号正常定义,库及其路径都被正确引用了。...这是一个典型库链接顺序导致符号未定义问题了。...链接顺序gcc/g++ 在合并目标文件生成可执行文件时候会存在库依赖问题:在命令行中,如果定义一个符号库出现在引用这个符合目标文件之前,那么引用就不能被解析,链接会失败。...如果不是相互独立,那么必须它们进行排序,使得对于每个目标文件外部引用符号 s,在命令行中至少有一个 s 定义是在对 s 引用之后。

23000

头文件是必须吗?跟一跟编译过程~~~

): undefined reference to `func()' collect2.exe: error: ld returned 1 exit status 报错说,未定义引用func()。...上面的ld是链接器,是一个可执行程序,它输入是一个或多个目标文件,如上面指令中main.o。 也就是说,目标文件main.o中引用了func(),但链接器找不到它定义。...显然,main.o中引用未定义func()被链接器在func.o中找到了。...即,链接器在面对一个目标文件时,如果碰到里面有未定义引用,会在其他目标文件中查找,如果找不到,则报错“undefined reference to”。如果找到有且仅有一个,则pass。...本文只是就着这个问题,跟了下编译过程,看看平常开发过程中遇到编译报错“未定义引用”、“未声明变量”这些错误来源是哪原因是什么。

1.8K10

C++如何调用写好C接口?

+ -o main main.cpp test.o 编译后链接出错:main.cppprint(int, int)未定义引用。...那么g++编译器为什么找不到print(int,int)呢,其实在我们学C++重载时候就提到过C++底层编译原理。...g++ 进行链接,也就是 C++ 链接方式,程序在运行到调用 print 函数代码时,会在符号表中寻找 _Z5printii(是按照C++链接方法来寻找,所以是找 _Z5printii 而不是找...print)名字,发现找不到,所以会提示“未定义引用” $ g++ -c test.c $ ls main.cpp makefile test.c test.h test.o $ nm test.o...extern “C” ,这个时候,g++编译器就会按照C语言链接方式进行寻找,也就是在符号表中寻找print(这才是C++兼容C),这个时候是可以找到,是不会报错

1.1K10

完美解决丨#在python中,如果引用变量未定义,则会报告NameError: name ‘变量名‘ is not defined。

NameError 在python中,如果引用变量未定义,则会报告NameError: name '变量名' is not defined。 如下代码抛出了一个异常: !...提示: 一般来说,在python中,需要保证变量定义在使用前面。...IndexError 在python中,如果list、tuple中元素被引用索引值超过了元素个数,则会报告IndexError: list index out of range。...原因: list索引值超过了list元素个数。 KeyError 在python中,如果dict中key不存在,则会报告KeyError: 'key'。 如下代码抛出了一个异常: !...TypeError 在python中,如果一个对象不是内置对象实例,则会报告TypeError。 如下代码抛出了一个异常: !

2.8K10

C++中使用vs2015和g++new开辟堆内存是否初始化分析

在C++中使用new运算符在堆中申请一内存块使用权同时还可以执行该内存块初始化工作。...下面通过使用2个类对象和2个基本数据类型来分析使用new class_object、new class_object()和new int、new int()这块内存初始化情况。...+编译器进行编译并执行 无论是否将DEFAULTFUN值设置为1(即打开类A中默认构造函数),在使用g++编译器编译并执行输出结果都如下图所示。...因此,图中类A两个对象obj1和obj2数据成员i_value值都为0,而且整型指针变量指向偏移量为10那个整数也都是0。...3 在visual studio 2015中进行编译并执行 分别把上面程序中DEFAULTFUN值设置为0和1,也就是测试类中是否包含自定义构造函数使用new运算符开辟内存并初始化影响,然后在

10210

【云+社区年度征文】WinForm引用ActiveX组件,Com组件学习

1、WinForm引用Adobe PDF Reader 工作中写WinForm程序经常会引用第三方组件,包括引用Com组件,做了一个桌面程序需要展示PDF,看了些其它开源组件PDF兼容性都不是很好...然后就直接引用了adboe pdf reader来显示,测试了不同pdf兼容性算是不错。那如何引用呢?...,对象和接口、接口实现、IUnknown接口等等 那是如何实现如何调用呢,引用一段有趣概括性描述: COM主要是一套给C/C++用接口,当然为了微软野心,它也被推广到了VB、Delphi以及其他一大堆奇奇怪怪平台上...接口其实是一个只有纯虚函数C++类,不过它进行了一些改造来兼容C和其他一些编程语言。...其实到此为止也并不算是很奇怪技术,我们用C++有的时候也会使用Factory方法来代替构造函数实现某些特殊多态,也会用引用计数等等。

1.8K40

gcc和g++区别

,虽然c++是c超集,但是两者语法要求是有区别的。...误区二:gcc不会定义__cplusplus宏,而g++会 实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义,否则,...gcc和g++区别  我们在编译c/c++代码时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确...,虽然c++是c超集,但是两者语法要求是有区别的,例如: #include int main(int argc, char* argv[]) {    if(argv =...,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”; “cannot convert `char**\' to `char*”; ”return-statement

2.7K10

makefile基础和工作常用点补充

(8) 在makefile 常见gcc/g++参数 -D 即条件编译; -static 使用静态库;注意 -L../lib -ldown  与 .....引用方式 $(var) 或 ${var}。   "="   递归展开变量,仅在目标展开时才会替换,也就是说它可以引用在后面定义变量。  ...":=" 直接展开变量,在定义时就直接展开,它无法后置引用。 "?=" 表示变量为空或未定义时才进行赋值操作。...vpath %.c  # 取消该模式 vpath  # 取消所有模式 VPATH 和 vpath 定义搜索路径仅对 makefile 规则有效, gcc/g++ 命令行无效,比如不能用它定义命令行头文件搜索路径参数...变量引用与替换 obj=$(dir:%.c=%.o) 可以将变量 dir 中所有以 c 结尾单词替换成以 o 结尾 $(addprefix src/, foo  bar)  返回值为“src

1.4K00

错误使用 C++ 模板特化产生

这听起来很奇怪是吧,不过确实是这样: 链接方式 1: g++ -c a.cc g++ -o main main.cc a.o 链接方式 2: g++ -c a.cc ar -r a.a a.o g++...当编译器链接 .o 时候,它会将 .o 中符号全部链接进最终文件中,而当链接 .a 时候,编译器则是会看当前链接结果是否存在未定义符号,如果没有,那就不链接这个 .a 文件里面的内容。...理论上 A::print() 被定义了两次,链接不应该通过才,这又是为什么?..._ZN1AIiE5printEv 前面标记了 U,这说明这是一个未定义符号,需要在外部查找,这就是为什么在正确实现版本中,编译器会去查找 .a 文件中定义。...此时 liba.a 中依赖于 libb.a 符号就是未定义了。

25630

Linux命令(63)——nm令

符号值表示该符号需要字节数。例如在一个C文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C,否则其类型为B。...主要用于small object提高访问small data object一种方式 i 这是标准ELF符号类型集GNU扩展。...它表示一个符号如果被重定位引用,不会计算该符号地址,而是必须在运行时计算 N 该符号是一个debugging符号。...u 符号是唯一全局符号。这是GNU标准ELF符号绑定集扩展。对于这样符号,动态链接器将确保在整个过程中只有一个使用此名称和类型符号。...g++ -c -g test.cpp -o test.o g++ -c -g main.cpp -o main.o 然后通过ar命令将两个目标文件打包成静态库libobjdump.a。

4.4K00

严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关

gcc严格别名定义: In particular, an object of one type is assumed never to reside at the same address as ...下列代码,如果使用“-O2”、“-O3”或“-Os”编译,并且加不“-fno-strict-aliasing”,则“*s”结果是未定义,不同编译器可能产生不同结果,即使同一编译器也可能运行时结果不尽相同...(&m); printf("%x\n", *s); return 0; } gcc-4.1.2上运行情况,可以看到每次结果都不相同: > g++ --version > g++ -g -o e e.cpp...short s; }; int main() { X x; x.m = 0x12345678; short* s = &x.s; printf("%x\n", *s); return 0; } 下列代码结果也是未定义...(多版本gcc实测也正常,同样未有编译告警,但gcc手册指出结果是未定义): #include union X { int m; short s; }; int main() { int m = 0x12345678

1.8K30

虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

2、在遇到通过基类指针或引用调用虚函数语句时,首先根据指针或引用静态类型来判断所调函数是否属于该class或者它某个public 基类,如果 属于再进行调用语句改写: (*(p->_vptr[slotNum...如果不属于,则直接调用指针或引用静态类型对应函数,如果此函数不存在,则编译出错。...我们常用编译器,如vc++、g++等都是用尾部追加成员方式实现继承(前置基类实现方式),在最好情况下可以做到指针不偏移;另一些编译器(比如适用于某些嵌入式设备编译器)是采用后置基类实现方式...也是论坛上经常讨论,也就是说delete 基类指针(在指针没有偏离情况下) 会不会造成内存泄漏问题,上面说到如果此时基类析构函数为虚函数,那么是不会内存泄漏,如果不是则行为未定义。...如果将B和D virtual 都去掉,B与D大小不一致,此时pb 没有偏移,delete pb; 只调用~B(),但用varlgrind 检测也没有内存泄漏,实际上如上所说,这种情况是未定义,但可以肯定是没有调用

92200

虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

2、在遇到通过基类指针或引用调用虚函数语句时,首先根据指针或引用静态类型来判断所调函数是否属于该class或者它某个public 基类,如果 属于再进行调用语句改写: (*(p->_vptr[slotNum...如果不属于,则直接调用指针或引用静态类型对应函数,如果此函数不存在,则编译出错。...我们常用编译器,如vc++、g++等都是用尾部追加成员方式实现继承(前置基类实现方式),在最好情况下可以做到指针不偏移;另一些编译器(比如适用于某些嵌入式设备编译器)是采用后置基类实现方式...也是论坛上经常讨论,也就是说delete 基类指针(在指针没有偏离情况下) 会不会造成内存泄漏问题,上面说到如果此时基类析构函数为虚函数,那么是不会内存泄漏,如果不是则行为未定义。...如果将B和D virtual 都去掉,B与D大小不一致,此时pb 没有偏移,delete pb; 只调用~B(),但用varlgrind 检测也没有内存泄漏,实际上如上所说,这种情况是未定义,但可以肯定是没有调用

97120
领券