CentOS实战001:解决cpp文件编译成so文件的问题

时间:2024-10-29 19:43:18

1、这里我备份了一份,命名为dome.cpp我们拿这个来编译,编译命令: g++ -o dome.so -shared -fPIC dome.cpp,如果成功则会在当前目录下生成一个dome.so的文件,我们可以看到系统提示很多警告和错误,警告我们暂时不管,先解决错误问题:

CentOS实战001:解决cpp文件编译成so文件的问题

2、问题一:_splitpath_s在此作用域中尚未声明这个函数需要的头文件是:<stdlib.h>,这个函数是 用来获取程序的路径,并对路径进行分解的。_splitpath 函数分割路径为:驱动器、目录、文件名和扩展名(即后缀名),所以这里我们定义几个char变量来承载这几部分信息

CentOS实战001:解决cpp文件编译成so文件的问题

3、在windows上编译时没有任何问题,但是到了centos上就出现了_splitpath_s在此作用阄莱决胪域中尚未声明的错误提示,找了很久才发现原来 linux 下是没有_splitpath_s函数的,所以无法识别该函数。 既然linux不支持_splitpath_s函数我就不用,那我就用字符串截取,现将获取到的char*转成string类型,然后再通过查找最后一个“/”来区分,这样我们同样可以获取到路径中的文件名(这里要注意获取到的文件名是带后缀的)

CentOS实战001:解决cpp文件编译成so文件的问题
CentOS实战001:解决cpp文件编译成so文件的问题

4、问题二:‘fopen_s’在此作用域中尚未声明 这里之所以用fopen_s是因为在windows调试的时候提示不安全,建议使用fopen_s或者在配置文件中添加_CRT_SECURE_NO_WARNINGS,我当时选择了使用fopen_s错误 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.既然在centos中报错了,那么我换回使用fopen试下,结果发现linux下不在报错,那么我再把windows上的配置改下即可。

CentOS实战001:解决cpp文件编译成so文件的问题

5、问题三:‘strlen’在此作用域中尚未声明前面我声明了一个char[10]常量,然后通过strlen来获取该字符串的长度,在windows上正常,但是到了linux上则报错了。

CentOS实战001:解决cpp文件编译成so文件的问题

6、在windows中使用strlen只要调用了头文件#include <string>和空间名using namespace std;即可使用,但是在Linux中需要添加头文件#include <string.h>才行,所以只要在前面再加个头文件即可识别strlen函数了,这样错误信息我们就解决完了

CentOS实战001:解决cpp文件编译成so文件的问题

7、接下来就是一些警告信息了,dome.cpp:339: 警告:不建议使用从字符串常量到‘char*’的转换,找到对应的行数我们就可以找到有问题的地方了,这个因该是在字符转换上没有做好,我们在适当的进行更改下就可以了。

CentOS实战001:解决cpp文件编译成so文件的问题

8、至于dome.cpp:212: 警告:算术表达式中使用了 NULL,既然linux不建议使用NULL,我们换了就成(我把NULL全换成了!=0),这样我们的所有错误和报警就都解决了。

CentOS实战001:解决cpp文件编译成so文件的问题
© 手抄报圈