由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 如何在C里面call C++的routine呢
相关主题
不用头文件,如何调用函数?C++c function 在 c里调用和C++调用结果不一样
请教C++11的rvalue ref[合集] 如果在自己的程序里调用external program (C++/Linux)
[合集] 弱问:C++ 里的Vector在Java里用什么替代比较好?C++ questions
[合集] 学了很久C/C++,就为什么总是学不深呢。C++ Q03:
which style do you prefer?C++ Q15: throw
namespace defined in another file求助,C++调用C 函数 的 LNK 2019 Error
C++里 variable declaration 有什么用?inline到底能省多少时间?
C++ help: 一个multiple definition problem.c++ does not check const for extern variable?
相关话题的讨论汇总
话题: foo1话题: c++话题: extern话题: include话题: main
进入Programming版参与讨论
1 (共1页)
l*********i
发帖数: 483
1
看了那个 C++ lite FAQ,还是没有搞定:
//cppfile.cpp
#include
void foo1(){
std::cout<<"this is foo1()"< }
//cppfile.h
extern "C" {
void foo1();
};
//cfile.c
#include "cppfile.h"
main()
{
foo1();
}
编译:
g++ -c cfile.c
g++ -c cppfile.cpp
g++ -o out.bin cfile.o cppfile.o
最后link的时候总是出错"cfile.o: In function `main':
cfile.c:(.text+0x5): undefined reference to `foo1'
collect2: ld returned 1 exit status
"
哪位给指点一下?多谢多谢。
k**f
发帖数: 372
2
add
#include "cppfile.h"
in cppfile.cpp.
r*********r
发帖数: 3195
3

ditto.
the "extern" tells g++ not to mangle the function name, so that main can
find it.
this has to be done when you compile the cppfile.cpp.

【在 k**f 的大作中提到】
: add
: #include "cppfile.h"
: in cppfile.cpp.

r*********r
发帖数: 3195
4
gnu has some programs in the "binutils" package. they are very useful.
like nm, c++filt, objdump, ldd etc.
in this example, you can type: "nm cppfile.o", and it tells you that the
function name has be mangled to __Z4foo1v, hence the error message that foo1
cann't be found.
use c++filt to de-mangle the name: "c++filt __Z4foo1v", and it tells you the
original function name is foo1.
c*******n
发帖数: 72
5
对, randomtiger说得对,你用nm看看object file里头的函数或者变量输出名,然后再
在c里头按照这个名字掉就好了。
其实原因就是c++支持重载,所以输出函数名字的时候在前面加了"_";
l*********i
发帖数: 483
6
多谢楼上几位的回复,涨知识了。
t****t
发帖数: 6806
7
你说的不对

【在 c*******n 的大作中提到】
: 对, randomtiger说得对,你用nm看看object file里头的函数或者变量输出名,然后再
: 在c里头按照这个名字掉就好了。
: 其实原因就是c++支持重载,所以输出函数名字的时候在前面加了"_";

j***i
发帖数: 3096
8
C不认识头文件中的extern "C"
google "C++中extern “C”含义深层探索",解释的很清楚。

【在 l*********i 的大作中提到】
: 看了那个 C++ lite FAQ,还是没有搞定:
: //cppfile.cpp
: #include
: void foo1(){
: std::cout<<"this is foo1()"<: }
: //cppfile.h
: extern "C" {
: void foo1();
: };

1 (共1页)
进入Programming版参与讨论
相关主题
c++ does not check const for extern variable?which style do you prefer?
C 和 C++ 的区别namespace defined in another file
C++怎样设置全局变量C++里 variable declaration 有什么用?
关于C++中 extern "C"的问题。C++ help: 一个multiple definition problem.
不用头文件,如何调用函数?C++c function 在 c里调用和C++调用结果不一样
请教C++11的rvalue ref[合集] 如果在自己的程序里调用external program (C++/Linux)
[合集] 弱问:C++ 里的Vector在Java里用什么替代比较好?C++ questions
[合集] 学了很久C/C++,就为什么总是学不深呢。C++ Q03:
相关话题的讨论汇总
话题: foo1话题: c++话题: extern话题: include话题: main