c ++中未定义的引用

时间:2015-09-09 17:41:49

标签: c++ shared-libraries undefined-reference

这是我遇到的错误。

-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是未定义的引用?

感谢您对我做错了什么的见解。

2 个答案:

答案 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;