首页 > 其他分享 >(GCC) gcc编译选项 -Wl, -start-group,whole-archive,-Wl, Bstatic

(GCC) gcc编译选项 -Wl, -start-group,whole-archive,-Wl, Bstatic

时间:2023-07-19 15:57:24浏览次数:31  
标签:GCC group Wl libX1 libX2 Bstatic 链接

1. start-group 编译选项

假设程序x依赖三个静态库:libX1.a、libX2.a和libX3.a,而libX2.a又依赖libX1.a,libX3.a依赖libX2.a和libX1.a,正常情况下的CMakeLists.txt格式如下

target_link_libraries(
    x
    libX1.a
    libX2.a
    libX3.a
)

但也可以偷懒,不关心静态库的顺序问题,ld为此提供了start-group和end-group两个选项,让包含在这两者间的静态库顺序可以随意。

target_link_libraries(
    x
    -Wl,--start-group
    libX3.a
    libX2.a
    libX1.a
    -Wl,--end-group
)

2. Bstatic编译选项

用 "-Wl,-Bstatic" 指定链接静态库,使用 "-Wl,-Bdynamic" 指定链接共享库,使用示例:

-Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest
CMAKE 复制 全屏

3. whole-archive编译选项

默认情况下,对于未使用到的符号(函数是一种符号),链接器不会将它们链接进共享库和可执行程序。
这个时候,可以启用链接参数 "--whole-archive" 来告诉链接器,将后面库中所有符号都链接进来,参数 "-no-whole-archive" 则是重置,以避免后面库的所有符号被链接进来。

标签:GCC,group,Wl,libX1,libX2,Bstatic,链接
From: https://www.cnblogs.com/lidabo/p/17565799.html

相关文章

  • android wifi GROUP_HANDSHAKE
    AndroidWifiGROUP_HANDSHAKE实现流程作为一名经验丰富的开发者,我将向你介绍如何实现"androidwifiGROUP_HANDSHAKE"。首先,让我们了解一下整个流程:步骤描述步骤1设置WifiDirect相关权限和功能步骤2搜索可用的WifiDirect网络步骤3连接到选定的Wif......
  • Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
    目录概符号说明RAGRetriever:DPRGenerator:BARTLewisP.andPerezE.,etal.Retrieval-augmentedgenerationforknowledge-intensivenlptasks.NIPS,2020.概RAG:赋予模型检索的能力.符号说明\(\bm{x}\),输入序列;\(\bm{y}\),输出序列,长度为\(N\);RAG......
  • centos7中yum安装gcc编译器11
     001、系统信息[root@PC1software]#cat/etc/system-releaseCentOSLinuxrelease7.6.1810(Core) 002、当前gcc编译器版本[root@PC1software]#gcc--versiongcc(GCC)4.8.520150623(RedHat4.8.5-36)Copyright(C)2015FreeSoftwareFoundation,Inc.T......
  • QSettings 蛋疼的General group
    General组是QSetting默认的group,如果你的conf/ini文件中使用了该组,请不要指定组名访问key如果要使用这个组名,请务必在前面加百分号% [General]device=siware_1[%General]xyz=abcd读出的结果("General/xyz","Server/baseUrl","Server/modelIdxAddr","device", 注......
  • centos7中根据gcc编译器安装包升级gcc编译器
     001、系统信息[root@PC1home]#lsb_release-aLSBVersion::core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarchDistributorID:......
  • python使用ctypes调用gcc编译的dll之下载mingw
    1、打开下载mingw的下载链接https://sourceforge.net/projects/mingw-w64/files/或者使用镜像网站下载http://files.1f0.de/mingw/2、根据自己电脑系统的版本下载相应64位或32位的mingw,红框中的包下载解压之后配置环境变量就可以使用了 3、将解压的mingw的路径添加环境变......
  • 容器原理之cgroup
    “以docker为代表,轻量、便携的container使得打包和发布应用非常容易。系列文章容器原理主要分析container用到的核心技术,主要包括Linuxnamespace,cgroups,overlayfs,看完这些内容,你将可以手动创建一个和container类似的环境。cgroup(controlgroup)是一个内核特性,用于限......
  • Mysql group replication(MGR)
    一、MGR 1、MGR的作用和特点  1)MGR的作用  对Mysql数据库进行故障冗余 保证数据库数据实时性和一致性 2)特点 高一致性:保证数据实时同步 高容错性:部署MGR不能低于三个节点,节点数量必须是单数 可扩展性强:不停止复制组热添加和移除Mysql节点 灵活性强:动态扩展......
  • 如何在gcc中传递宏定义
    要在GCC中传递宏定义,可以使用-D选项来定义宏并传递给编译器。下面是在编译时传递宏定义的示例:gcc-DDEBUGsource.c-oprogram在上述示例中,-DDEBUG定义了一个名为DEBUG的宏,并将其传递给编译器。在源代码中可以使用#ifdef或#ifndef来根据宏的定义状态进行条件编译。......
  • cpuset.cpus.effective: no such file or directory (修改 docker cgroup 版本的方法)
    要切换使用v1版cgroup,需要做如下配置: vim/etc/default/grub   GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0" update-grubreboot  完美解决 ......