一周技术杂谈2023_09_11--2023_09_15

本文介绍了如何在Linux64位系统上运行32位程序,包括设置步骤如添加i386架构和安装必要的库。还探讨了回调函数在CMake中的使用以及在使用g++编译时遇到的问题,以及如何调整CMakeflags以解决C++库链接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平铺直述!

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,然后解决了。。

b4fce35ec8ea4454178cca59cfb0627f.jpeg

关注公众号,不迷路~

e225afcd88b574d4eea27a4a916aa573.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值