QT编译问题---libfreeimage.so.3, needed by .., not found(try using -rpath or -rpath-link)

背景:

        在加载打印机的动态库libDSThermal.so时候,尝试各种方法的编译,就是编译不通过。

        最后不断尝试,终于发现,qt项目最终生成的lib的话就能编译通过,但是生成app的话,就会有问题,编译不过。

        原来是libDSThermal.so这个库依赖libfreeimage.so.3,但是又找不到。但是这个库都已经放在指定的路径下。这就是问题。

        其实这个报错也给自己提示了,因为当涉及到共享库(shared libraries)时,找不到库的话,要得自己手动指定运行时和链接时得库搜索路径。

-rpath-rpath-link 是两个常用的链接器(linker)选项,它们分别用于指定运行时和链接时的库搜索路径。

在 Qt 项目文件(.pro 文件)中,你可以通过 QMAKE_LFLAGS 变量来添加这些链接器选项。例如:

# 添加运行时库搜索路径
QMAKE_LFLAGS += -Wl,-rpath,/path/to/your/libs

# 如果需要在链接时也指定搜索路径(通常用于解决链接时找不到库的问题)
# 注意:这通常不是必需的,除非链接器在链接时找不到库
QMAKE_LFLAGS += -Wl,-rpath-link,/path/to/your/libs

        然而,需要注意的是,-rpath-link 通常不是必需的,除非你在链接时遇到了找不到库的问题,并且你确定链接器在链接过程中需要访问这些库。在大多数情况下,只需设置 -rpath 就足够了,因为它会确保在运行时能够找到所需的共享库。

        另外,如果你使用的是相对路径或者想要将库路径嵌入到可执行文件中(例如,使用 $ORIGIN),你可以这样做:

# 使用 $ORIGIN 指定相对于可执行文件位置的路径
QMAKE_LFLAGS += -Wl,-rpath,'\$ORIGIN/../libs'

        在这个例子中,$ORIGIN 会被替换为可执行文件的实际路径,因此 ../libs 会指向可执行文件父目录的 libs 子目录。注意,在 -rpath 选项中,路径中的 $ 符号需要被转义(即使用 \$),以避免在 qmake 处理 .pro 文件时被解释为变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值