gpt4 book ai didi

c++ - 编译和链接调用 C++ 函数的 C 代码

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:14 25 4
gpt4 key购买 nike

从我的 C 代码调用 C++ 方法时遇到问题。我需要在 C++ 代码中调用的方法不在类中。我正在尝试设置一个简单的示例,并且我有以下文件:

//header.h
#ifdef __cplusplus
#include <iostream>
extern "C" {
#endif
int print(int i, double d);
#ifdef __cplusplus
}
#endif

//ccode.c
#include "header.h"

main() {
printf("hello");
print(2,2.3);
}

//cppcode.cc
#include "header.h"
using namespace std;
int print(int i, double d)
{
cout << "i = " << i << ", d = " << d;
}

可能我的错误在于我尝试编译和链接它的方式。我正在做以下事情:

g++ -c cppcode.cc -o cppcode.o

一切顺利。

gcc ccode.c cppcode.o -o ccode

这里我得到以下错误:

cppcode.o: In function `print':
cppcode.cc:(.text+0x16): undefined reference to `std::cout'
cppcode.cc:(.text+0x1b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
cppcode.cc:(.text+0x28): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
cppcode.cc:(.text+0x35): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
cppcode.cc:(.text+0x42): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(double)'
cppcode.o: In function `__static_initialization_and_destruction_0(int, int)':
cppcode.cc:(.text+0x6b): undefined reference to `std::ios_base::Init::Init()'
cppcode.cc:(.text+0x70): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

我假设发生这种情况是因为我使用的是 C 编译器。编译和链接这个小例子的正确方法是什么?我的想法是让 C 代码运行并只调用 C++ 函数,而不必用 C 重写它们。在此先感谢您的帮助!

我使用的是 Ubuntu 12.04,gcc 版本 4.6.3

最佳答案

您需要链接 C++ 运行时库。

gcc ccode.c cppcode.o -o ccode -lstdc++

关于c++ - 编译和链接调用 C++ 函数的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com