作者cole945 (躂躂..)
看板C_and_CPP
标题Re: [问题] gcc and g++
时间Sun Mar 11 01:33:18 2007
※ 引述《fox726 (no comment)》之铭言:
: 请问一下
: 有个library是用gcc编译而成的
: 然而我的程式会call这个library, 却是用g++编译的
: 我发现在link的时候, 会出现undefined reference的问题
: 我有试过另外写一只小程式去call那个library
: 用gcc编译就可以link, 用g++编译就会一样undefined reference
: 所以很显然是因为compiler不一样的问题@@
: 那我现在的难题是
: 那个library只能用gcc, 而我的程式只能用g++
: 这要怎麽解决link的问题呢?
这是因为 C/C++ 签章不同所照成的~
例如 void lala(int);
在 C 可能会被签成 lala
在 C++ 时则会被签成 lala_int
因为C++支援overloading的关系,
只有name不够识别, 所以还要签上parameter的type
(只是假设会被签成类似这样的形式~)
所以你用 C++ 编出来的程式, 在linking时, 他会期望有一个 lala_int可以连结,
但你的library用C编出来的却是 lala, 所以才会找不到(undefined reference)
解法就是告诉 g++ 要连结的这个 lala 是个 c-funtion
在宣告的地方(.h档之类) 加上
extern "C" lala(int);
或是直接整个用 extern "C" {} 一次包住所有的function
header很简单的话这样应该就可以解决了@_@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.146.2
1F:推 bobhsiao:推一下 03/11 10:40
2F:推 zxvc:推 03/11 21:48
3F:推 endl:推 03/13 13:59
4F:→ damon98:确定答案了,(x86) inline assembly push args to stack. 03/19 20:23