无法从 C 调用C++代码而没有错误
Cannot Call C++ Code from C without Error
我正在尝试编写一个可以从 C 调用的C++库。但是,每当我尝试编写一个最低限度的示例时,它都会因未定义的引用而崩溃。这是我的代码:
我的图书馆
#ifndef __MY_CPP_THING_H
#define __MY_CPP_THING_H
#ifdef __cplusplus
extern "C" {
#endif
void printSomething();
#ifdef __cplusplus
}
#endif
#endif
我的图书馆.cpp
#include <iostream>
#include "mylibrary.h"
extern "C" {
void printSomething() {
std::cout << "PLEASE PRINTn";
}
}
主.c
#include "mylibrary.h"
int main() {
printSomething();
return 0;
}
编译过程如下所示:
g++ -c mylibrary.cpp -o mylibrary.o
(创建"mylibrary.o"(
ar rcs libmylibrary.a mylibrary.o
(创建静态库"libmylibrary.a"(
gcc main.c -L. -lmylibrary
(链接静态库并编译 C 源文件(
但是,我收到此错误转储:
mylibrary.o:mylibrary.cpp:(.text+0x17): 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*)'
mylibrary.o:mylibrary.cpp:(.text+0x32): undefined reference to `std::ios_base::Init::~Init()'
mylibrary.o:mylibrary.cpp:(.text+0x62): undefined reference to `std::ios_base::Init::Init()'
mylibrary.o:mylibrary.cpp:(.rdata$.refptr._ZSt4cout[.refptr._ZSt4cout]+0x0): undefined reference to `std::cout'
collect2.exe: error: ld returned 1 exit status
关于如何解决错误的任何建议?
mylibrary.o
仍然依赖于C++标准库,gcc
不知道它。在最后一步中拨打gcc
-lstdc++
。
创建一个动态库而不是静态库应该可以解决问题:
$ gcc -c main.c
$ g++ -fPIC -shared -o mylibrary.so mylibrary.cpp
$ gcc -o main main.o mylibrary.so
然后:
$ LD_LIBRARY_PATH=".:${LD_LIBRARY_PATH}" ./main
PLEASE PRINT
跟:
$ objdump -p main | grep NEEDED
NEEDED mylibrary.so
NEEDED libc.so.6
$ objdump -p mylibrary.so | grep NEEDED
NEEDED libstdc++.so.6
NEEDED libc.so.6
相关文章:
- 我的字符计数代码计算错误.为什么
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何修复sfml c++代码编译错误
- 需要以下代码的帮助,下面的代码有什么问题
- 我的代码中有错误,未声明的标识符
- 我关于函数"Assert"的C++代码有问题
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- C++ LeetCode #377 的 DP 解决方案中,此代码是否有错误?
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 我在这个 C++ 代码上有错误吗?
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 是视觉C++优化器错误还是我的代码中有错误?
- 我的 MergeSort 显示错误的输出,您认为我的代码有什么问题
- 这个C++代码有什么问题?编译错误:调用“测试::测试(测试)”没有匹配函数
- 我的链表代码有错误,有人能帮我检查哪里错了吗
- 下面的代码有哪些错误?
- 为什么此代码有 C2784 "could not deduce template argument"错误
- 是否有任何内置的CUDA函数允许CUDA内核向主机代码报告错误?
- 我的代码有问题,因为我无法弄清楚为什么会收到错误。这是代码:
- Cocos2d-X的testcpp代码是否有错误?