平铺直述!
1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
其他已验证:32位用到的系统库无需替换。其他自己链接的库需要处理(这块我 直接链接静态库做规避。)
2、回调函数与cmake编译
1>回调函数
typedef int(*ReadInputDataCallback) (int input);
//函数指针,指向函数的指针变量。可以被调用之前上学时学到过这个概念,如今知道了具体使用场景
//int是函数返回类型,int input是函数参数
ReadInputDataCallback g_readInputDataCallback;
int* getinoutData(int inpput){Printf(“input data is : %d \n”, inpput);
}
//回调函数:函数指针作为函数参数
int RegisterReadInputDataCallback(const ReadInputDataCallback ptr){
g_readInputDataCallback = ptr;
}
RegisterReadInputDataCallback(getInputData);
Int inputData = 666;
g_readInputDataCallback(inputData );
2>cmake编译
上述操作使用cmake gcc组织文件编译是没问题的,但是如果使用g++编译是有问题的,具体如下:
error: ‘<anonymous>’ has incomplete type
具体来讲是g++不允许该该危险行为,网上搜索的方法比较粗暴,使用-fpermissive编译选项,该选项的作用是允许编译一些非法的C++语法,将报错转换为警告。
3>cmake将c程序与c++程序混编
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -O2" )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
这块使用背景是这样的:原来的程序是使用cmake组织文件的,入口程序是.c的,新需求需要链接C++的库,结果链接后c++标准库找不到,还有很多系统库的错误,因为在gcc的编译器编译C++代码,后来把入口程序后缀改成了.cpp,然后解决了。。
关注公众号,不迷路~