添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

转自:http://blog.csdn.net/onlyou930/article/details/6423647

当程序依赖的库不断增多时,如果把所有的库放到一起,当目标机上同时也有其他应用程序需要某个特定版本库的时候,这种做法会造成严重的版本冲突问题。专业的做法是,自己的程序依赖库只放到应用程序特定的目录下,程序去连接对应目录的库文件运行。

在make文件编写中,LFLAGS选项可以设置自定义的可执行程序库文件查找路径。那么在Qt中如何设置、修改.pro文件,使用qmake来自动生成LFLAGS依赖?

在“qmake Variable Reference”(qmake 变量参考)一节中,正是这个参数:QMAKE_LFLAGS,会修改Makefile的LFLAGS选项。本参数包含了传递给连接器的一组通用的标记。如果要为某个特定平台或者特殊项目修改选项,可以使用某个特殊参数,而可不用本参数。与之对应的还有QMAKE_LFLAGS_CONSOLE(仅适用于 Windows)、QMAKE_LFLAGS_DEBUG(指定Debug版依赖库路径)、QMAKE_LFLAGS_RELEASE(指定 Release版依赖库路径)…

使用指定的QMAKE_LFLAGS的好处在于,能够根据当前编译的不同配置(例如debug/release)选择不同路径下的依赖库(这些库也可能分为debug/release版)。当然,如果所有依赖库版本都相同,那么直接修改QMAKE_LFLAGS效果是一样的。

那么,在Qt项目的pro文件中,增加一行: QMAKE_LFLAGS += "-Wl,-rpath=[自定义库文件路径] -Wl,-Bsymbolic ",然后执行qmake,make 即可。其中 Wl 表示将紧跟其后的参数,传递给连接器ld。Bsymbolic表示强制采用本地的全局变量定义,这样就避免动态链接库的全局变量定义被应用程序/动态链接库中的同名定义给覆盖了.

QMAKE_LFLAGS += "-Wl,-rpath=/opt/pclibs/lib -Wl,-Bsymbolic"

----------------------------分割线------------------------------

当然,和 Qt中使用pkgconfig结合使用就更完美了

PKG_CONFIG = PKG_CONFIG_PATH=/opt/pc_linux/lib/pkgconfig/ pkg-config

#设置PKG_CONFIG路径

CONFIG += link_pkgconfig

#此选项会调用${ avcodec avutil 路径 }/lib/pkgconfig里面.pc中列举的相关头文件和库路径
PKGCONFIG +=libavcodec libavutil

QtiOSPush -------- iOS平台 ===================================== 这是QML和QWidgets实现的客户端,它运行在iOS上,目前有正式的支持。 需要QtCreator 需要Qt 5.3或更高 需要作为第三个库。 需要依赖XCode的库 QMAKE _L FLAGS += -framework OpenGLES QMAKE _L FLAGS += -framework GLKit QMAKE _L FLAGS += -framework CFNetwork QMAKE _L FLAGS += -framework QuartzCore QMAKE _L FLAGS += -framework CoreVideo QMAKE _L FLAGS += -framework CoreAudio QMAKE _L 文章目录前言一、linux下的共享库二、动态链接和静态链接三、显示动态链接四、pro中的编译、链接参数1.QMKAE_CXX FLAGS QMAKE _L FLAGS 2.编译器参数-fvisibility3.编译器参数 -shared、-fPIC4.链接器参数 -Wl,-Bsymbolic5.链接器参数 -Wl,-rpath=*相对路径或绝对路径*五、全局符号的载入顺序 本文主要是记录了在用QtCreator作为IDE在linux下进行共享库开发时遇到的问题及解决方法,其中也包含自己对linux在编译,. 在实际项目开发时,一般打包发布给客户的程序是release版本Qt程序,然而在客户环境下可能会出现程序异常崩溃的问题,为了解决这个问题,一般会在程序中添加运行日志,或者生成dump文件,用来检测并定位异常。这里总结以下几种方式,用于程序异常崩溃检测定位。 最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、静态库、动态库等增加、删除;文件搜索路径等的修改就没法下手了,因此必须对我比较关注的地方进行深度学习,知其然还要知其所以然,知道怎么从无到有写出来,而且别人的makefile还要知道怎么根据需求的变化进行修改。... 通过查看Qt编译生成的Makefile文件可以学习到Qt内部对不同编译模式做了哪些工作; Qt默认的三种编译模式基本可以适用于大部分开发调试的场景; 当我们遇见特殊的问题时就需要手动修改编译器选项,在程序编译时选择合适的优化参数和生成调试信息参数,在运行性能、程序大小、调试方便三个方向进行权衡利弊。 例如在不需要考虑性能时可以完全关闭优化,生成尽可能多的调试信息,以方便调试; 而有些程序运行需要一定的性能,就可以选择开启一定较低级别的优化。 【代码】QT中添加 QMAKE _L FLAGS += /MANIFESTUAC:\"level=\'requireAdministrato。。。后导致QtCreator中每次运行程序启动失败。 QMAKE _L FLAGS += "-Wl,-rpath,\'\$$ORIGIN\'" QMAKE _L FLAGS += "-Wl,-rpath,\'\$$ORIGIN/lib\'" QMAKE _L FLAGS += "-Wl,-rpath,\'\$$ORIGIN/../lib\'" 今天再用addr2line 时, 发现不能给出行号,原来是gcc/g++编译器 -fPIC 引起的,参考: 处理segment fault 的一种方法_hjjdebug的博客-CSDN博客_segmentfault 编译需要加入-no-pie 就可以看到源码信息了. 如果在qt 工程里如何控制编译选项呢, 我包括查网络,主要也是自己试出来的,记录一下: 1. qmake -d 有 lots of message 输出, 可参考. 2. Makefile 内容 3. 网络 发现关键是 qt 编译出来的程序有的需要管理员权限 qt 6.1.2版本,mingw81_64编译, 找到6.1.2\mingw81_64\mkspecs\common下的msvc-desktop.conf, QMAKE _L FLAGS _EXE = “/MANIFESTDEPENDENCY:type=‘win32’ name=‘Microsoft.Windows.Common-Controls’ version=‘6.0.0.0’ publicKeyToken=‘6595b64144ccf1df’ l 生成可调试版本的release包 1.通常情况下Qt的release是不能像debug一样进行调试的,所以我们即使拿到release版本的dump文件也无法进行调试。所以第一... 起因:项目中用qt quick程序写的上位机程序,在公司多台电脑能运行,客户电脑要更新显卡才能运行,可后来发现是少了opengl32.dll。于是乎,想运用静态编译来避免此问题,开干。 准备工作:工作机本身安装的qt5.7.0 mingw,由于通过vs2010编译了一个动态库,上位机调用的时候也得用vs的编译器,下载了msvc2013,msvc2010不得行,这个问题还鼓捣了一阵。但安装的时候都...