首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++链接错误:使用#define编写函数名称时对函数的未定义引用

g++链接错误:使用#define编写函数名称时对函数的未定义引用
EN

Stack Overflow用户
提问于 2012-08-02 01:49:04
回答 1查看 1.8K关注 0票数 0

function.cpp ->编译为function.o,然后是libFunction.so

代码语言:javascript
复制
#define PASTEHELPER(a,b) a ## b

#define PASTE(a,b) PASTEHELPER(a,b)

void PASTE(My,Function)() { .... }

main.cpp ->编译成main.o。但链接时出错

代码语言:javascript
复制
void MyFunction();

g++中的链接错误。(不过,在Visual中很成功)

代码语言:javascript
复制
g++ -mtune=i686 -MP -MMD -MT .o -Wextra -Woverloaded-virtual -Wno-sign-compare -Wno-conversion -Wno-missing-field-initializers -O3 -DNDEBUG -fno-strict-aliasing -fPIC -fdiagnostics-show-option -DPROJECT=MyProjec  -o /mypath  main.o -L..  -L/sbcimp/run/pd/gcc/32-bit/4.4.2/lib/gcc/i686-pc-linux-gnu/4.4.2 -L/sbcimp/run/pd/gcc/32-bit/4.4.2/lib -lFunction -pthread -L/sbcimp/run/pd/python/2.7.1/lib -lpython2.7 -l util  -L/sbcimp/run/pd/boost/32-bit/1.47.0_gcc4.4.2/lib -lboost_filesystem -lboost_thread -lboost_regex -lboost_system -Wl,-rpath,/sbcimp/run/pd/boost/32-bit/1.47.0_gcc4.4.2/lib -L/sbcimp/run/pd/apache_xerces-c/32-bit/3.1.1_mt_gcc4.4.2/lib -lxerces-c -Wl,-rpath,/sbcimp/run/pd/apache_xerces-c/32-bit/3.1.1_mt_gcc4.4.2/lib -ldl -Wl,-z,origin -Wl,-rpath,'$ORIGIN' -Wl,-rpath,/sbcimp/run/pd/gcc/32-bit/4.4.2/lib/gcc/i686-pc-linux-gnu/4.4.2,-rpath,/sbcimp/run/pd/gcc/32-bit/4.4.2/lib,-soname,MyProject


main.cpp: undefined reference to 'MyFunction'. 

函数没有在任何.h文件中定义。这就是问题所在吗?如果需要在.h中声明函数,如何编写它?

EN

回答 1

Stack Overflow用户

发布于 2012-08-02 04:42:35

我不确定粘贴链接器的错误是否完成。

但是无论如何,如果链接器真的抱怨MyFunction,那么它希望符号MyFunction是C,而不是C++ (在C++中,它应该抱怨MyFunction())。

因此,我猜您要么将void MyFunction();声明为extern "C",要么实际上通过使用gcc而不是main.cpp编译main.c来获得main.o

您可以通过运行以下命令来检查库中的内容和链接器所期望的内容:

代码语言:javascript
复制
objdump -t function.o |grep MyFunction
objdump -t main.o |grep MyFunction

如果您从.o文件编译了这两个.cpp文件,您应该会得到像_Z10MyFunctionv这样的符号名。符号名应该是相同的。但如果他们中的一个没有被破坏(如。就是MyFunction),那么它来自C,而不是C++。

如果这两个函数都是错误的,但是不同,那么在这两种情况下,声明函数的方式都是不同的。

#define的使用根本不应该影响链接器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11769968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档