小编Mac*_*hta的帖子

如何在不更改代码的情况下为所有C++函数设置属性?

我想-Wunused-result在GCC中使用该选项来检测代码中未使用/忽略的返回值.但这需要使用属性属性说明符序列标记函数声明.

手动执行此操作可能非常耗时且容易出错.我想知道是否有办法告诉GCC为所有函数设置属性(或设置默认属性),以便我可以使用警告标志.

c++ gcc

11
推荐指数
1
解决办法
296
查看次数

如何使用GCC / LD设置RPATH和RUNPATH?

我最近在系统升级后遇到了这个问题:使用GCC -Wl,-rpath=选项的工作方式与以前不同。

我用它来设置一些在我的项目子模块中构建的共享库的搜索路径。当时我认为它比在LD_LIBRARY_PATH系统范围内进行设置要好(我不想每次打开计算机时都进行设置)。一切正常,这两种方法似乎是等效的。

现在,它的行为-rpath已经改变。它仍然适用于直接依赖的库,但不适用于通过链接来自同一目录集的其他库的库-rpath=。导出LD_LIBRARY_PATH仍然可以像以前一样进行。

我使用来检查了编译的输出,readelf并且有所不同。升级之前(Linux Mint 18.2和GCC 5.4),“ 动态”部分具有以下内容:

0x000000000000000f (RPATH)            Library rpath: [submod/lib]
Run Code Online (Sandbox Code Playgroud)

升级后(带有GCC 7.3的Linux Mint 19),该行更改为:

0x000000000000001d (RUNPATH)            Library runpath: [submod/lib]
Run Code Online (Sandbox Code Playgroud)

使用RPATH而不是RUNPATH吗?建议将RPATH替换为RUNPATH(或者说,它至少具有不同的用途,因为它的优先级较低),但是它没有给出答案为什么会影响间接链接。库本身在readelf输出中既没有RPATH也没有RUNPATH 。

所以我的问题是:为什么链接程序突然开始以-rpath=不同的方式解释选项,并且有办法强制执行旧的行为?(或者做一些不同的事情,将产生相同的结果。)

另一个问题是:是否可以告诉链接器的旧版本产生新的输出(即RUNPATH而不是RPATH)?


编辑

这不是如何设置二进制文件的RunPath的副本-我的问题恰恰相反:我想要RPATH的行为。我知道了(感谢评论中的技巧),我将在这里回答我的问题。

linux gcc shared-libraries dynamic-linking ld

6
推荐指数
2
解决办法
3536
查看次数

git clone的深度是什么意思?

我们试图加快工作中的一个软件项目的CI生成速度。在项目生命早期,有人提交了一些(按git的标准)巨大的二进制文件。仅仅为了摆脱它们而重写git的历史似乎太麻烦了,因此我们认为做一个浅表克隆可以避免那些大的早期提交就足够了。

我使用--depth克隆参数进行了一些实验,并遇到了一些奇怪的行为。这是git clone对此的帮助:

--depth <depth>
           Create a shallow clone with a history truncated to the specified number of commits. Implies
           --single-branch unless --no-single-branch is given to fetch the histories near the tips of all
           branches. If you want to clone submodules shallowly, also pass --shallow-submodules.
Run Code Online (Sandbox Code Playgroud)

这将表明<depth>它将等于克隆期间将获取的提交数量,但事实并非如此。这是我尝试不同的深度值时得到的:

| depth   | commit count linux repo | commit count git repo |
|---------|-------------------------|-----------------------|
| 1       | 1                       | 1                     |
| 5       | 15                      | 13                    |
| 10 …
Run Code Online (Sandbox Code Playgroud)

git git-clone

5
推荐指数
2
解决办法
811
查看次数

标签 统计

gcc ×2

c++ ×1

dynamic-linking ×1

git ×1

git-clone ×1

ld ×1

linux ×1

shared-libraries ×1