首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再议GCC编译时的静态库依赖顺序问题

GCC编译时的静态库依赖次顺问题.pdf 假设有如三个源代码文件: $ cat a.cpp void a() { } $ cat b.cpp extern void a(); void b... -g -c $^ b.o: b.cpp g++ -g -c $^ x.o: x.cpp g++ -g -c $^ clean: rm -f a.o b.o x.o x 使用上面的Makefile编译...1 这个问题的原因是b.cpp依赖a.cpp,gcc要求(实际是ld要求)libb.a须放在liba.a前面,即需要改成:g++ -g -o x x.o libb.a liba.a,也就是被依赖的库需要放在后头...这是最常规的解决办法,除此之外,只需要加入--start-group和--end-group两个链接参数,即可保持被依赖的库放在前头,也就是改成如下即可:g++ -g -o $@ -Wl,--start-group...位于“--end-group”之后的仍然要求被依赖的库放在后头。

3.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    cmake 添加头文件目录,链接动态、静态库

    cmake 添加头文件目录,链接动态、静态库 cmake 添加头文件目录,链接动态、静态库 1. 添加头文件目录INCLUDE_DIRECTORIES 2....env目录,而不是常见的/usr/、/usr/local等目录,使用cmake进行编译时需要注意头文件和库文件的目录的设置。...cmake 添加头文件目录,链接动态、静态库 罗列一下cmake常用的命令。 CMake支持大写、小写、混合大小写的命令。 1....(myProject libcomm.a) # 显示指定链接静态库 target_link_libraries(myProject libcomm.so) # 显示指定链接动态库 # 再如: target_link_libraries...,链接动态、静态库 cmake 链接动态链接库 cmake 3.19官网帮助文档 Getting started with cmake CMake projects in Visual Studio Configure

    25.6K11

    Linux交叉编译Windows静态库

    我是木荣,在开发软件时,很有可能在各种操作系统中使用。因此,以跨平台的方式构建软件以确保与多种操作系统的兼容性非常重要。在本文中,我们将介绍Linux交叉编译Windows的静态库。...; } 第 3 步- 编译静态库 下一步是使用交叉编译器编译静态库。...“-L.”选项告诉编译器在当前目录中查找静态库,“-lhello”选项告诉编译器链接到“libhello.a”静态库。...除了上面概述的步骤之外,在为 Windows 从 Linux 交叉编译静态库时还需要记住一些事项: 平台特定代码− 交叉编译时,请务必记住代码可能在不同的平台上运行。...文档- 交叉编译时,记录过程非常重要,以便其他开发人员可以轻松跟进。这可以包括记录使用的交叉编译器、用于编译静态库的命令以及任何特定于平台的注意事项。

    37610

    minigui:静态编译连接mgncs库时遇到的xml2的问题

    blog.csdn.net/10km/article/details/83047021 最近做一个基于minigui/mgncs的项目,在开发阶段因为是在ubuntu下基于minigui的模拟器开发,所以编译时都是标准的动态库连接...,只需要加上-lxml2就可以了,但在静态连接时,就要把xml2所依赖的所有库都要加上,用pkg-config命令就可以查看xml2静态连接和动态连接所需要的参数,如下 # 动态库连接只需要-lxml2...于是再为xml2库加上-lpthread -ldl就可以编译通过了(-lpthread -ldl的先后顺序没有关系) 下面就是静态连接xml2的完整连接参数: -lxml2 -licui18n -licuuc...事实上,mgncs根本没有把这个mxmlds.h文件release出来,只是mgncs内部配合MiniStudio时使用的,所以编译目标平台的mgncs库时禁用它完全没问题。...于是如下在编译mgncs时加上--enable-dbxml=no,重新编译mgncs。 .

    1.9K10

    Linux基础——gcc编译、静态库与动态库(共享库)

    gcc编译器 1、gcc工作流程 2、gcc常用参数 参数 用途 -v 查看版本 -o 产生目标文件 -I+目录 指定头文件目录 -D 编译时定义宏 -00/-01/-03 没有优化/缺省值.../优化级别最高 -Wall 提示更多警告信息 -c 只编译子程序 -E 生成预处理文件 -g 包含调试信息 静态库 1、静态库的命名格式 lib + 库的名字 + .a 例:libMyTest.a...(MyTest为静态库的名字) 2、静态库作用分析 在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,生成的静态库要和头文件同时发布...优点: 寻址方便,速度快 库在链接时被打包到可执行文件中,直接发布可执行程序即可以使用 缺点: 静态库的代码被加载到可执行程序中,因此体积过大 如果静态库的函数发生改变,必须重新编译可执行程序 3、静态库的制作与使用.../include 第二步:创建静态库 ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库中,c创建静态库,不管库是否存在,s写入一个目标文件索引到库中

    8.7K40

    linux下编译qt5.6.0静态库

    linux下编译qt5.6.0静态库 编译QT是一件比较麻烦的事情。所以如果没有必要,就不要编译了。如果你只需要使用QT的一些基本功能,那么就只编译源码目录下的qtbase目录下的东西即可。... 头文件安装目录(默认 PREFIX/include) -libdir 库文件安装目录(默认 PREFIX/lib) -archdatadir QT相关的数据将被安装到...-no-mips_dsp 编译不要使用MIPS DSP指令 -no-mips_dspr2 编译不要使用MIPS DSP Rev2指令 -qtnamespace 把所有的Qt库代码放入.... * -strip 在安装时对二进制文件和库的使用strip去除不需要的符号 * -no-pch 不使用预编译的头支持....意思是警告:使用静态链接将禁用动态加载插件的使用。确保导入所有需要的静态插件,或者编译所需的模块到库中。这不是一个好的做法。 ?

    1K30

    使用静态库提高TouchGFX的编译速度

    但是由于touchgfx的代码量过于庞大,对于编译的速度来说还是不够快,接下来使用静态库的方式更进一步提升开发效率。...v4.15和 STM32CubeMX V6.0.1 代码下载: 示例代码: https://download.csdn.net/download/sinat_31039061/13057209 一、制作静态库工程...将需要调试的代码设置为不参与编译 ? 4.设置输出为静态库文件 ? 5.编译生成静态库 ? 二、制作应用工程 1. 切换到application工程 ? 2....将不需要调试的代码设置为不参与编译 ? 3. 添加上个工程生成的库 ? 在这里插入图片描述 4....由于application工程参与编译的代码大量减少,所有编译会瞬间完成 平时可以根据项目的进度,动态调整参与编译的静态库 三、通过VSCODE编辑代码 通过VSCODE的keil插件打开工程,可以发现有三个工程

    1.4K30

    cmake:msvc编译第三方库时使用MT静态库连接cc++ runtime library

    关于在cmake生成msvc工程时静态链接c/c++运行库的问题,很久以前写过一篇博客《cmake设置msvc的运行库(runtime library)塈指定openjpeg使用静态库》。...当时的办法是在CMakeLists.txt中加一段代码将C_FLAGS_XXX,CXX_FLAGS_XXX等所有变量中的/MD替换成/MT ,就这样解决了问题。...2.如果是编译第三方库,也要用这种办法,就得修改第三方库的cmake脚本,无疑就增加了工程管理的复杂度,更容易出错。...CMAKE_CXX_FLAGS_XXXX等系列变量每一个都对应一个后缀为_INIT的初始变量CMAKE_C_FLAGS_XXXX_INIT,CMAKE_CXX_FLAGS_XXXX_INIT,这些变量中保存的就是编译选项的初始值...如下定义一个名为 compiler_flags_overrides.cmake的脚本,脚本中将_INIT后缀的所有编译器初始化变量中的/MD统统改为/MT, if(MSVC) # Use

    3.8K70

    go语言静态库的编译和使用

    27 Apr 2018 go语言静态库的编译和使用 本文主要介绍go语言静态库的编译和使用方法,以windows平台为例,linux平台步骤一样,具体环境如下...现在,需要将demo.go编译成静态库demo.a,不提供demo.go的源代码,让main.go也能正常编译运行,详细步骤如下: 1 编译静态库demo.a >go install demo 在命令行运行...go install demo命令,会在%GOPATH%目录下生相应的静态库文件demo.a(windows平台一般在%GOPATH%\src\pkg\windows_amd64目录)。...但是,如果删除了静态库demo.a,就不能编译main.go,如下: >go tool compile -I E:\share\git\go_practice\pkg\windows_amd64 main.go...main.go:3: can't find import: "demo" 以上就是go语言静态库的编译和使用方法,下次介绍动态库的编译和使用方法。

    3.6K130

    Go 静态编译及在构建 docker 镜像时的应用

    静态链接库也有一些缺点,首先是静态链接库是在编译链接过程中被复制到可执行文件中的,当静态链接库有更新时,应用程序必须重新执行编译链接得到新的可执行文件。...动态链接库避免了上述问题,应用程序在编译时只记录一些动态链接库的基础信息,在加载应用程序但还没有运行时会将依赖的动态链接库中的函数与内存中的程序链接起来形成一个完整的程序,所有引用同一个动态链接库的可执行文件共用这个库中的代码和数据...addvec.c 文件,其中 addvec 函数实现两个向量数组的相加 multvec.c 文件,其中 multvec 函数实现两个数组向量的相乘 定义头文件 vector.h main2.c 用来测试使用链接库...静态编译是在编译时就将依赖的静态链接库复制到可执行文件中,这样在应用程序运行起来后无需依赖外部的库,只需要单一的可执行文件即可运行,但缺点是应用程序体积相对较大,程序运行的越多重复占用的内存浪费越多。...动态编译 但并不是所有情况下都不需要依赖外部库,例如对于很多经典的 C 语言函数库来说,编程语言没必要自己重新实现一遍,需要用到时直接调用 C 语言函数库即可。

    11510

    【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )

    文章目录 一、编译时注解和注解处理器 二、创建 编译时注解 和 注解处理器 三、添加 编译时注解 和 注解处理器 依赖库依赖 四、博客资源 一、编译时注解和注解处理器 ---- 上一篇博客 【Android...APT】编译时技术 ( ButterKnife 原理分析 ) 简单介绍了下编译时技术 , 并简单分析了 ButterKnife 的实现原理 ; 使用 ButterKnife 时会依赖两个库 , dependencies...依赖库 , 这两个 Module 的类型都是 " Java or Kotlin Library " ; 三、添加 编译时注解 和 注解处理器 依赖库依赖 ---- 在主应用 " app " 中 ,...依赖上述 annotation 编译时注解 依赖库 和 annotation-compiler 注解处理器 依赖库 ; 右键点击应用 , 选择 " Open Modules Settings " 选项..., 将 annotation 编译时注解 依赖库 和 annotation-compiler 注解处理器 依赖库 添加到主应用 " app " 的依赖中 ; 添加依赖完成 ; 点击 " OK "

    38910
    领券