我在外部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路径和库路径以及链接器的文件。有任何想法吗 ?谢谢!
答案 0 :(得分:0)
更改
void myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}
到
void MyClass::myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}