Vic*_*MdB 7 c c++ linker gcc g++
我意识到这个问题已经通过多种方式提出,包括这个非常全面的答案,但我看了很多,并尝试修复我的错误无济于事.
我正在使用.cpp和.c文件来创建程序.我使用g ++编译了所有文件,它似乎没有更多的链接错误,尽管它给了我一堆与C语法相关的C++错误.这是我使用的命令:
g++ -o program main.cpp /data/*.c -l[...libs]
Run Code Online (Sandbox Code Playgroud)
main.cpp调用.c文件中的函数.然后我明白不应该尝试用一个编译器编译.c和.cpp文件,而是使用gcc作为一个,g ++用于另一个,然后简单地链接目标文件.
所以我做了这个(.c文件是库的一部分,已经有.o文件)
g++ -c main.cpp
g++ -o program main.o /data/*.o -l[..libs]
Run Code Online (Sandbox Code Playgroud)
但是接下来我将从main.cpp调用到预编译的.c文件的函数中获得"未定义的引用"错误,这是我以前没有得到的错误.
有人可以帮忙吗?或者我可能需要提供更多信息?
编辑(更深入的代码摘录,我试图简化否则这将无法阅读,但让我知道如果我仍然需要添加东西,我会尝试删除不必要的代码):
main.cpp:
#include "header.h"
int main(int argc, char** argv) {
string s1 = argv[2];
fn1(s1)
}
Run Code Online (Sandbox Code Playgroud)
header.h
void fn1(string s1)
Run Code Online (Sandbox Code Playgroud)
mycfile.c
#include "header.h"
void fn1(string s1){
fprintf(stdout, " you entered %s", s1);
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)
回答:
@Smeehey帮助我弄清楚了解决方案,实际上我仍然在我正在使用的.hpp文件中包含旧标题.但核心解决方案确实是使用外部C {}.
Sme*_*eey 11
这很可能与C-vs-C++链接有关.在你的main.cpp,你可能有这样的事情:
#include <data/header.h>
Run Code Online (Sandbox Code Playgroud)
where header.h指你的c库.替换如下:
extern "C" {
#include <data/header.h>
}
Run Code Online (Sandbox Code Playgroud)
这告诉你的c ++编译器在从头部定义所需的符号时不要使用c ++样式的名称修改,允许链接器在c编译的.o文件中成功找到它们.
| 归档时间: |
|
| 查看次数: |
17183 次 |
| 最近记录: |