这是我遇到的错误。
-bash-4.1$ g++ strl.cpp -o -lc-
/tmp/ccRpiglh.o: In function `main':
strl.cpp:(.text+0xf): undefined reference to `plusplus'
collect2: ld returned 1 exit status
听到是strl.cpp的源代码。这是一个复制我的问题的简单示例。
strl.cpp
#include <iostream>
#include <stdlib.h>
#include "libc-.h"
using namespace std;
int main()
{
cout<<plusplus(5,2)<<'\n';
}
这是libc.cpp
的来源libc.cpp
#include <iostream>
using namespace std;
int plusplus(int a, int b)
{
return a + b;
}
libc-.h
的来源libc-.h
#ifndef _SCANTYPE_H_
#define _SCANTYPE_H_
#include <iostream>
#include <stdlib.h>
#ifdef __cplusplus
extern "C"
{
#endif
using namespace std;
int plusplus(int a, int b);
#ifdef __cplusplus
}
#endif
#endif
我正在编译以下内容:
g++ -Wall -shared -fPIC -o libc-.so libc-.cpp
g++ strl.cpp -o -lc-
g++ -Wall -shared -fPIC -o libc-.so libc-.cpp
编译没有错误。
为什么函数plusplus
是未定义的引用?
感谢您对我做错了什么的见解。
答案 0 :(得分:0)
这是什么&#39;使用&#39;在libc-.h中? 无论如何,它在我看来你需要在libc.cpp中包含这个头。见https://stackoverflow.com/a/1380926/2406949
答案 1 :(得分:0)
缺少对plusplus()
的引用,因为它未提供。你很有希望
`int plusplus(int a, int b);`
C
中有libc-.h
个关联,但未在libc.cpp
中保留您的承诺。
要解决此问题,请将后一个文件更改为
// libc.cpp
#include <iostream>
#include "libc-.h" // include proto-type which has C linkage
int plusplus(int a, int b)
{
return a + b;
}
此外,您应该永远在标题文件中执行using namespace std;
。