【发布时间】:2014-04-25 09:12:30
【问题描述】:
我的 C 程序应用程序需要调用 C++ 函数。但是 C++ 函数中有字符串类型。例如,我需要像这样写一个函数 fooC():
//main.c:
void fooC()
{
char* str = "hello";
fooCPP(str);
}
//foo.cpp
void fooCPP(String& str)
{
......
}
如何正确编写代码?
更新
//hello.cpp
#include <iostream>
#include <string>
#include "hello.h"
using namespace std;
void fooCpp(char const* cstr){
std::string str(cstr);
cout << str <<endl;
}
//hello.h
#ifdef __cplusplus
extern "C"{
#endif
void fooCpp(char const* str);
#ifdef __cplusplus
}
#endif
//main.c
#include "hello.h"
int main()
{
char* str = "test" ;
fooCpp(str);
return 0;
}
编译:
g++ -c hello.cpp hello.h
gcc hello.o main.c -g -o main
错误:
hello.o: 在函数__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x23): undefined reference tostd::ios_base::Init::Init()'
hello.o:在函数__tcf_0':
hello.cpp:(.text+0x6c): undefined reference tostd::ios_base::Init::~Init()'
hello.o: 在函数fooCpp':
hello.cpp:(.text+0x80): undefined reference tostd::allocator::allocator()'
hello.cpp:(.text+0x99): 对std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
hello.cpp:(.text+0xa4): undefined reference tostd::allocator::~allocator()'的未定义引用............ ...........
.....................................
【问题讨论】:
-
@el.pescado 所说:使用 g++ 作为链接器而不是 gcc,以获取到 STL 的链接。
标签: c++ c compiler-construction linker