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


    平铺直述!

    1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置:

    1. sudo dpkg --add-architecture i386
    2. sudo apt-get update
    3. 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;
    1. int* getinoutData(int inpput){
    2. Printf(“input data is : %d \n”, inpput);
    3. }

    //回调函数:函数指针作为函数参数

    1. int RegisterReadInputDataCallback(const ReadInputDataCallback ptr){
    2. g_readInputDataCallback = ptr;
    3. }
    RegisterReadInputDataCallback(getInputData);
    1. Int inputData = 666;
    2. g_readInputDataCallback(inputData );

    2>cmake编译

    上述操作使用cmake gcc组织文件编译是没问题的,但是如果使用g++编译是有问题的,具体如下:

    error: ‘’ has incomplete type

    具体来讲是g++不允许该该危险行为,网上搜索的方法比较粗暴,使用-fpermissive编译选项,该选项的作用是允许编译一些非法的C++语法,将报错转换为警告。

    3>cmake将c程序与c++程序混编

    1. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32 -O2" )
    2. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
    3. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

    这块使用背景是这样的:原来的程序是使用cmake组织文件的,入口程序是.c的,新需求需要链接C++的库,结果链接后c++标准库找不到,还有很多系统库的错误,因为在gcc的编译器编译C++代码,后来把入口程序后缀改成了.cpp,然后解决了。。

    b4fce35ec8ea4454178cca59cfb0627f.jpeg

    关注公众号,不迷路~

    e225afcd88b574d4eea27a4a916aa573.png

  • 相关阅读:
    git push 报错 The requested URL returned error: 500
    渗透测试-CNA_Bshell程序
    TopK问题求解方法
    Andriod开发R文件爆红相关解决方法及排查方案
    CSRF和XSS有什么区别
    uniapp 实现在线签合同/签名/信息认证(无插件依赖)
    泛型的介绍和使用方法
    本地PHP搭建简单Imagewheel私人云图床,在外远程访问
    Spring AOP
    实战案例(MDL语句)
  • 原文地址:https://blog.csdn.net/ACK_ACK/article/details/132959819