对 'myNamespace::MyClass::myFunc()' 的未定义引用
undefined reference to 'myNamespace::MyClass::myFunc()'
我在外部 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
然而,我没有得到的是,如果我只是实例化 class,它将输出正确的 a=1 值,如构造函数中指定的那样。
我已经指定了编译器的包含路径以及链接器的库路径和文件,正如您在编译命令中看到的那样。有任何想法吗 ?谢谢!
改变
void myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}
至
void MyClass::myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}
我在外部 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
然而,我没有得到的是,如果我只是实例化 class,它将输出正确的 a=1 值,如构造函数中指定的那样。
我已经指定了编译器的包含路径以及链接器的库路径和文件,正如您在编译命令中看到的那样。有任何想法吗 ?谢谢!
改变
void myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}
至
void MyClass::myFunc() {
std::cout << "myFunc() has been called !" << std::endl;
}