其他的函数,变量,静态的,非静态的都没有问题。
网上搜索,发现别人举的例子里面有构造函数,所以应该不是本身不支持的问题。
不知道有没有人遇到过这种情况?怎么解决呢?
15 个解决方案
#1
还是没有人回答
表示不忍看下去
表示不忍看下去
#2
为神马,private了?
#3
是public的,我实在找不到原因。只要把构造函数去掉,链接就成功,加上,链接就失败
#4
上代码吧, 构造实现了没有?
#5
不了解,上代码看看。
#6
上代码
#7
说的不详细啊。。。 无从下手
#8
帮顶~
#9
不懂。。帮顶~
#10
代码来了:
so中的入口文件,main.cpp:
头文件,main.h
GlobalGameObj的头文件,GlobalGameObj.h:
GlobalGameObj的源文件,GlobalGameObj.cpp
首先用下面的编译:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
得到了main_main.o
然后用下面的编译:
g++ -shared -o libGameLogic.so main_main.o
得到了libGameLogic.so
这个时候执行nm libGameLogic.so,就可以看到构造函数的状态是U
如果用下面的测试文件,test.cpp:
用下面的编译和连接:
g++ test.cpp -L. -lGameLogic -o test.o
就会报错:
./libGameLogic.so: undefined reference to `GlobalGameObj::GlobalGameObj()'
collect2: ld returned 1 exit status
如果我去掉了GlobalGameObj的构造函数,就没有问题,可以正确链接成功。
求助!!
so中的入口文件,main.cpp:
#include "include/main.h"
#include "include/GlobalGameObj.h"
GlobalGameObj gameObj;
extern "C" int DllMain(int thread_id, char *buf, int *p_len)
{
return 0;
}
extern "C" int DllInit(char *p_config_file, int thread_id)
{
return 0;
}
extern "C" void DllExit(int thread_id)
{
}
头文件,main.h
#ifndef _MAIN_H_
#define _MAIN_H_
extern "C"
{
int DllMain(int thread_id, char *buf, int *p_len);
int DllInit(char *p_config_file, int thread_id);
int DllInit(char *p_config_file, int thread_id);
}
#endif
GlobalGameObj的头文件,GlobalGameObj.h:
#ifndef _GLOBAL_GAME_OBJ_H_
#define _GLOBAL_GAME_OBJ_H_
class GlobalGameObj
{
public:
GlobalGameObj();
void Init(char *config_file, int thread_id);
};
#endif
}
GlobalGameObj的源文件,GlobalGameObj.cpp
#include "include/GlobalGameObj.h"
GlobaGameObj::GlobalGameObj()
{
}
void GlobaGameObj::Init(char *config_file, int thread_id)
{
}
首先用下面的编译:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
得到了main_main.o
然后用下面的编译:
g++ -shared -o libGameLogic.so main_main.o
得到了libGameLogic.so
这个时候执行nm libGameLogic.so,就可以看到构造函数的状态是U
如果用下面的测试文件,test.cpp:
#include "main/include/main.h"
int main()
{
DllInit(0, 0);
}
用下面的编译和连接:
g++ test.cpp -L. -lGameLogic -o test.o
就会报错:
./libGameLogic.so: undefined reference to `GlobalGameObj::GlobalGameObj()'
collect2: ld returned 1 exit status
如果我去掉了GlobalGameObj的构造函数,就没有问题,可以正确链接成功。
求助!!
#11
自己顶一下
#12
我没见你制作GlobalGameObj.so啊。
are you joking?
are you joking?
#13
我自己已经试验了一下:你应该如下编译过程:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
g++ -fPIC -I../main -o ../build/GlobalGameObj.o -c GlobalGameObj.cpp
g++ -shared -o libGameLogic.so main_main.o GlobalGameObj.o
g++ test.cpp -L. -lGameLogic -o test
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
g++ -fPIC -I../main -o ../build/GlobalGameObj.o -c GlobalGameObj.cpp
g++ -shared -o libGameLogic.so main_main.o GlobalGameObj.o
g++ test.cpp -L. -lGameLogic -o test
#14
另外,执行test程序前export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
#15
哦,我知道了,我的makefile文件有问题,目录下面每个cpp都有规则,但是少了总的规则来编译他们,导致每次只生成第一个cpp的o文件。谢谢!
#1
还是没有人回答
表示不忍看下去
表示不忍看下去
#2
为神马,private了?
#3
是public的,我实在找不到原因。只要把构造函数去掉,链接就成功,加上,链接就失败
#4
上代码吧, 构造实现了没有?
#5
不了解,上代码看看。
#6
上代码
#7
说的不详细啊。。。 无从下手
#8
帮顶~
#9
不懂。。帮顶~
#10
代码来了:
so中的入口文件,main.cpp:
头文件,main.h
GlobalGameObj的头文件,GlobalGameObj.h:
GlobalGameObj的源文件,GlobalGameObj.cpp
首先用下面的编译:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
得到了main_main.o
然后用下面的编译:
g++ -shared -o libGameLogic.so main_main.o
得到了libGameLogic.so
这个时候执行nm libGameLogic.so,就可以看到构造函数的状态是U
如果用下面的测试文件,test.cpp:
用下面的编译和连接:
g++ test.cpp -L. -lGameLogic -o test.o
就会报错:
./libGameLogic.so: undefined reference to `GlobalGameObj::GlobalGameObj()'
collect2: ld returned 1 exit status
如果我去掉了GlobalGameObj的构造函数,就没有问题,可以正确链接成功。
求助!!
so中的入口文件,main.cpp:
#include "include/main.h"
#include "include/GlobalGameObj.h"
GlobalGameObj gameObj;
extern "C" int DllMain(int thread_id, char *buf, int *p_len)
{
return 0;
}
extern "C" int DllInit(char *p_config_file, int thread_id)
{
return 0;
}
extern "C" void DllExit(int thread_id)
{
}
头文件,main.h
#ifndef _MAIN_H_
#define _MAIN_H_
extern "C"
{
int DllMain(int thread_id, char *buf, int *p_len);
int DllInit(char *p_config_file, int thread_id);
int DllInit(char *p_config_file, int thread_id);
}
#endif
GlobalGameObj的头文件,GlobalGameObj.h:
#ifndef _GLOBAL_GAME_OBJ_H_
#define _GLOBAL_GAME_OBJ_H_
class GlobalGameObj
{
public:
GlobalGameObj();
void Init(char *config_file, int thread_id);
};
#endif
}
GlobalGameObj的源文件,GlobalGameObj.cpp
#include "include/GlobalGameObj.h"
GlobaGameObj::GlobalGameObj()
{
}
void GlobaGameObj::Init(char *config_file, int thread_id)
{
}
首先用下面的编译:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
得到了main_main.o
然后用下面的编译:
g++ -shared -o libGameLogic.so main_main.o
得到了libGameLogic.so
这个时候执行nm libGameLogic.so,就可以看到构造函数的状态是U
如果用下面的测试文件,test.cpp:
#include "main/include/main.h"
int main()
{
DllInit(0, 0);
}
用下面的编译和连接:
g++ test.cpp -L. -lGameLogic -o test.o
就会报错:
./libGameLogic.so: undefined reference to `GlobalGameObj::GlobalGameObj()'
collect2: ld returned 1 exit status
如果我去掉了GlobalGameObj的构造函数,就没有问题,可以正确链接成功。
求助!!
#11
自己顶一下
#12
我没见你制作GlobalGameObj.so啊。
are you joking?
are you joking?
#13
我自己已经试验了一下:你应该如下编译过程:
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
g++ -fPIC -I../main -o ../build/GlobalGameObj.o -c GlobalGameObj.cpp
g++ -shared -o libGameLogic.so main_main.o GlobalGameObj.o
g++ test.cpp -L. -lGameLogic -o test
g++ -fPIC -I../main -o ../build/main_main.o -c main.cpp
g++ -fPIC -I../main -o ../build/GlobalGameObj.o -c GlobalGameObj.cpp
g++ -shared -o libGameLogic.so main_main.o GlobalGameObj.o
g++ test.cpp -L. -lGameLogic -o test
#14
另外,执行test程序前export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
#15
哦,我知道了,我的makefile文件有问题,目录下面每个cpp都有规则,但是少了总的规则来编译他们,导致每次只生成第一个cpp的o文件。谢谢!