如何在cygwin中将-pg传递给gcc

Posted

技术标签:

【中文标题】如何在cygwin中将-pg传递给gcc【英文标题】:how to pass -pg to gcc in cygwin 【发布时间】:2019-04-08 04:46:00 【问题描述】:

我只是想测试一下-pg,源文件很简单,我的环境是 赛格温,

$ uname -a 
CYGWIN_NT-10.0 SHA-LPLATOW 2.8.2(0.313/5/3) 2017-07-12 10:58 x86_64 Cygwin

$ vi pgtest.c

#include <stdio.h>
void main(void)
    printf("hello, world\n");        

no -pg 编译是可以的。

$ gcc -c pgtest.c
$ gcc -o pgtest.exe pgtest.o

但是-pg报错

$ gcc -pg -c pgtest.c
$ gcc -o pgtest.exe pgtest.o
pgtest.o:pgtest.c:(.text+0x1): undefined reference to `__fentry__'
pgtest.o:pgtest.c:(.text+0x1): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__fentry__'
pgtest.o:pgtest.c:(.text+0xe): undefined reference to `_monstartup'
pgtest.o:pgtest.c:(.text+0xe): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_monstartup'
collect2: error: ld returned 1 exit status

我试过LDFLAGS,还是一样。

export LDFLAGS="-pg" ; gcc -o pgtest.exe pgtest.o

【问题讨论】:

简单的gcc -o pgtest.exe pgtest.o -pg怎么样? @chtz 没问题,但是我想通过环境变量传递,因为我用的是scons。 @netawater,我认为您必须检查您的 scons 文档,或者您可以获得 scons 帮助的地方。 (这里可能带有scons 标签?)我对scons 几乎一无所知。您可以将'-pg' 标志添加到您的scons 设置中吗? scons 是否查看环境变量? gcc 不看LDFLAGS 或类似的东西。您可以在调用make 之前设置LDFLAGS,因为make 会查看它并将其传递给gcc @SeeJayBee 谢谢,我发现使用 LINKFLAGS 而不是 LDFLAGS 对 scons 来说是可以的 【参考方案1】:

来自 gcc 信息页面

'-pg' 生成额外的代码来编写适合的配置文件信息 分析程序“gprof”。编译时必须使用此选项 你想要数据的源文件,你也必须在什么时候使用它 链接。

所以如果你想进行单独的编译和链接,你需要重复-pg

$ gcc -c pgtest.c -pg
$ gcc -o pgtest.exe pgtest.o -pg

【讨论】:

谢谢,但是我在scons中使用link命令,可以直接设置set,可以通过环境变量来完成

以上是关于如何在cygwin中将-pg传递给gcc的主要内容,如果未能解决你的问题,请参考以下文章

如何将密码传递给pg_dump?

cygwin 中如何安装arm-linux-gcc交叉编译器

如何在 Msys 或 Cygwin 中将文件设置为只写或只读?

gcc/cygwin如何获取DNS服务器?

如何将 url-array-parameter 传递给 pg_execute

如何在链式函数中将选定元素传递给“this”