qmake 修改编译选项

今天再用addr2line 时, 发现不能给出行号,原来是gcc/g++编译器 -fPIC 引起的,参考:

处理segment fault 的一种方法_hjjdebug的博客-CSDN博客_segmentfault

编译需要加入-no-pie 就可以看到源码信息了.

如果在qt 工程里如何控制编译选项呢, 主要是自己试出来的,记录一下:

参考了:

1. qmake -d 有 lots of message 输出, 可参考.

2. Makefile 内容

3. 网络

发现关键是修改 QMAKE_CXXFLAGS, QMAKE_LDFLAGS 才能够改变到Makefile 中的CXXFLAGS,LDFLAGS,  给出一个示例来如下, 请参考注释.

######################################################################
# Automatically generated by qmake (3.1) Tue Apr 5 16:31:59 2022
######################################################################

TEMPLATE = app
TARGET = crash
INCLUDEPATH += .
QT-=core gui
CONFIG+=debug
# 想改变CXXFLAGS, 采用如下的方式
QMAKE_CXXFLAGS += -no-pie
QMAKE_CXXFLAGS_APP -= -fPIC
# 想改变LFLAGS 选项?
QMAKE_LFLAGS += -no-pie

# You can make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# Please consult the documentation of the deprecated API in order to know
# how to port your code away from it.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

# Input
SOURCES += main.cpp

1. 生成Map 文件: QMAKE_LFLAGS += -Wl,-Map,file_name.map

2. CONFIG+=debug, 它是cflags, cxxflags 添加了-g 选项,去掉了-O2选项.

-O 选项有5种,-O1,-O2,-O3,-Os,还有-O0

-g 选项有3种-g1,-g2,-g3在加一种-ggdb, 默认(-g)选项是-g2

3. 如果你想添加更多的调试信息(例如令宏可见),并显示指定不优化,此2项方便gdb调试,可添加如下宏

QMAKE_CFLAGS = -ggdb3 -O0

QMAKE_CXXFLAGS = -ggdb3 -O0

4. 在.pro 中添加-rpath 选项, 这是个连接选项,用来指明动态库从哪个路径下加载,写在执行文件中了. 可如下添加, 直接举例吧.

LIBS+=-Wl,-rpath,/opt/ffmpeg_build/lib
LIBS+=/opt/ffmpeg_build/lib/*.so
第一条设置了rpath为/opt/ffmpeg_build/lib. 这样用ldd 命令时会看到效果,否则有可能是例如/lib/x86_64/ 目录下的文件.

第二条连接了/opt/ffmpeg_build/lib 目录下所有的.so 文件.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值