对'myNamespace :: MyClass :: myFunc()'

时间:2015-07-06 14:02:29

标签: c++ dll linker eclipse-cdt

我在外部c ++ main中调用test_dll.dll中的函数时遇到问题。使用eclipse cdt luna sr2 64,Windows 7.使用MinGW工具链进行编译。

dll .cpp代码:

#include <iostream>
#include "MyClass.h"

namespace myNamespace {

MyClass::MyClass() :a(1) {
    std::cout << "MyClass():a(" << this->a << ")"<<std::endl;
}

MyClass::~MyClass() { }

void myFunc() {
    std::cout << "myFunc() has been called !" << std::endl;
}

}

并使用以下行在eclipse中编译:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -o MyClass.o "..\\MyClass.cpp" 
g++ -shared -o libtest_dll.dll MyClass.o 

我的主要代码如下:

#include <iostream>
#include "MyClass.h"

using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    myNamespace::MyClass *instance = new myNamespace::MyClass;
    instance->myFunc();

    return 0;
}

并使用以下

进行编译
g++ "-IC:\\Users\\nxa02192\\Desktop\\MY_WORKSPACE\\test_dll" "-includeC:\\Users\\nxa02192\\Desktop\\MY_WORKSPACE\\test_dll\\MyClass.h" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\test_main.o" "..\\src\\test_main.cpp"
g++ "-LC:\\Users\\nxa02192\\Desktop\\MY_WORKSPACE\\test_dll\\Debug" -o test_main.exe "src\\test_main.o" -llibtest_dll
src\test_main.o: In function `main':
C:\Users\nxa02192\Desktop\MY_WORKSPACE\test_main\Debug/../src/test_main.cpp:20: undefined reference to `myNamespace::MyClass::myFunc()'
collect2.exe: error: ld returned 1 exit status

然而,我没有得到的是,如果我只是实例化该类,它将输出正确的a = 1值,如构造函数中指定的那样。

我已经在编译命令中看到了编译器的include路径和库路径以及链接器的文件。有任何想法吗 ?谢谢!

1 个答案:

答案 0 :(得分:0)

更改

void myFunc() {
    std::cout << "myFunc() has been called !" << std::endl;
}

void MyClass::myFunc() {
    std::cout << "myFunc() has been called !" << std::endl;
}