首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    cmake链接静态库-static-libstdc++问题

    在嵌入式平台中,业务使用C语言开发,在交叉编译过程中会链接一个第三方的c++静态库,该第三放库使用了std,需要链接libstdc++的库,由于所在的嵌入式平台中没有libstdc++.so库,如果将libstdc...++.so拷贝板子上,需要占用5MB空间,很浪费空间,准备使用libstdc++的静态库,在链接过程中出现如下问题;   整个业务的编译使用cmake构建,使用如下方式进行链接; add_executable...'libstdc++'的库,在cmake中有链接-static-libstdc++,而且交叉工具链中是有libstdc++.a库,当我们将cmake改为: add_executable(${target...'lstdc++'是gcc和g++都能识别,但是'-static-libstdc++'只有g++可以识别,而我的业务代码都是使用C语言编写的,在链接时cmake默认使用的是gcc,但是gcc不能识别'-...static-libstdc++',最终不会链接到实际的libstdc++.a,所以在链接时出现不能识别std的问题; 知道原因了,就很好解决了,在链接阶段将cmake的链接选项改为g++即可,添加如下一行就可以正常链接成功

    8.8K51

    【CMake】使用 CMake 将多模块 C 项目构建为库并链接主程序

    本文将以你提供的多模块 C 项目为例,介绍如何使用现代 CMake: 组织清晰的模块目录结构; 每个模块单独构建为静态库; 主程序链接多个模块; 配置输出产物目录; 实现跨平台构建支持。 1....99) # 设置输出目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY...${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # 添加模块构建目录 add_subdirectory...add_subdirectory(src/color) add_subdirectory(src/password) # 构建主程序 add_executable(${PROJECT_NAME} src/main.c) # 链接静态库...构建项目 在项目根目录下执行以下命令: mkdir build cd build cmake .. cmake --build .

    1.2K10

    【CMake】使用 CMake 将单模块 C 项目构建为库并链接主程序

    本文将以一个简单模块 color 为例,介绍如何使用 CMake: 构建一个结构清晰的 C 项目; 将模块编译为静态库; 配置可执行程序链接库; 自定义库输出路径; 支持跨平台构建(Windows/macOS...include/ 放置对外公开头文件,便于跨模块引用 src/color/ 独立模块,具备独立构建能力 build/ 构建输出与源代码分离,保持干净 CMakeLists.txt 配置统一构建规则与链接流程...99) # 设置库和可执行文件的输出路径 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY...) # 添加 color 模块 add_subdirectory(src/color) # 添加主程序 add_executable(${PROJECT_NAME} src/main.c) # 链接...art/,放入 art.c, art.h; 添加对应 CMakeLists.txt 和库配置; 所有模块的头文件统一放入 include/; 在顶层 CMakeLists.txt 中添加子目录与链接即可

    76210

    cmake:动态链接库(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++

    使用这种方案,我的so库代码不需要在编译时链接tcmalloc,什么都不用改变,就能使用tcmalloc。...(so的代码是以C++11写的,所以还要依赖于libstdc++库,所以我打算把libstdc++库也以静态方式连接到程序中) ##判断操作系统类型 if(CMAKE_SYSTEM_NAME MATCHES..."${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"...MATCHES "Linux") cmake生成的Makefile中实际的连接指令(link.txt的内容)是: /usr/local/bin/g++ -fPIC -fno-builtin-malloc...总结 如果在可执行程序中静态链接tcmalloc时,用默认参数编译tcmalloc就好了,无需带-fPIC参数, 但是在动态库(so)中静态链接tcmalloc,必须要用-fPIC重新编译tcmalloc

    3.1K10

    【CMake】CMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )

    developer.android.google.cn/ndk/guides ; 方式一 : 使用 ndk-build 脚本 , 包括 Android.mk 和 Application.mk 两个脚本 , 详细的细节参考如下链接...CMakeLists.txt 编译 C/C++ 源码 , 参考如下链接 CMake 这是目前 Google 官方推荐的方式 ; 二、CMake 构建脚本示例 ---- 下面的构建脚本中用到了很多命令.../jniLibs/armeabi-v7a") # 链接函数库 # 参数 1 : 本构建脚本要生成的动态库目 标 # 参数 2 ~ ... : 后面是之前预编译的动态库或静态库..., 或引入的动态库 target_link_libraries( native-lib # 表示 编译 native-lib 模块, 要链接 add 模块...| 引入静态库 | 指定静态库路径 | 链接动态库 ) 复制来的 ; 三、CMake 命令手册 ---- CMake 命令分为三种 , 脚本命令 , 工程命令 , CTest 命令 ; 1、CMake

    5.3K01

    CMake学习笔记(二)——CMake语法

    :重新定义目标链接库文件的存放位置; PROJECT_NAME:返回由PROJECT指令定义的项目名称; CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS:用来控制IF…ELSE…语句的书写方式...; 指定链接目标文件时需要链接的外部库,效果类似于gcc编译参数-L,解决外部库依赖的问题。...(4) LINK_FLAGS 为一个目标的链接阶段添加额外标志。...(6) LINKER_LANGUAGE 改变链接可执行文件或共享库的工具。默认值是设置与库中文件相匹配的语言。 CXX与C是该属性的公共值。...构建或安装时,如果平台支持符号链接,且链接器支持so名称,那么恰当的符号链接将会被创建。如果只指定两者中的一个,缺失的另一个假定为具有相同版本号。

    7.2K100
    领券