交叉编译qt源码时,增加了openssl选项,结果报错。
我选的时-openssl-linked,这是静态连接openssl吧?报错找不到libcrypto.so,提示用-rpath或-rpath-link。
我直接用了-R 库路径,竟然通过编译了。于是好奇 -rpath, -rpath-link, -R的作用。
configure -h时发现有-rpath和-R的选项,看描述,两者相似。没找到-rpath-link描述。
而看描述,前两者是用来制定动态链接库的路径的,而我这里是静态连接库,为何也能其作用?
qt warning: libcrypto.so.1.1, not found (try using -rpath or -rpath-link)
-R <string> .......... Add an explicit runtime library path to the Qt
libraries. Supports paths relative to LIBDIR.
-rpath ............... Link Qt libraries and executables using the library
install path as a runtime library path. Similar to
-R LIBDIR. On Apple platforms, disabling this implies
using absolute install names (based in LIBDIR) for
dynamic libraries and frameworks. [auto]
最近编辑记录 Gentlepig (2023-07-14 09:02:22)
离线
建议用 buildroot。
硬件是t113-s3,用的tina sdk。2.0时,有qt选项,但是默认配置编译通不过,按群友的文件修改makefile去掉gpu相关,可以编译了,就是qmake有问题。
这次用了tina sdk 2.1,默认没有qt,只好搜网上教程手动移植。
离线
我的理解是这样的:
正常链接时, app 依赖库A, 而库A又依赖库B 库C, 那么链接APP的时候就需要 -lA -lB -lC 才能找到各个符号
而用了rpath 就可以省事一些, 只需要 -lA, 自动会从rpath指定的路径查找各个依赖的库
rpath 和rpath-link的区别是, rpath会在ELF头里添加一个库搜索路径, 让程序运行时的额外从指定的路径查找库
离线
@真的是很烦
但是有个-L是来指定库路径的啊。
-L 库路径
-l 库名称
-I 头文件路径
离线
@真的是很烦
但是有个-L是来指定库路径的啊。
-L 库路径
-l 库名称
-I 头文件路径
-L是可以指定路径, 但是不会自动搜索需要的库啊
举个小栗子吧
libA 依赖libB, app要调用libA, 链接app时应该是-lA -lB -L./libs
用rpath可以直接指定个 -lA 就行, libA依赖的东西会去指定目录搜索
离线
@真的是很烦
谢谢,我再消化下。
离线
想将usb口模拟串口使用。
内核配置里选了usb gadaget support里的serial gadaget,配置成了M动态加载驱动。make后usb/gadget目录下有3个.ko文件,g_serial.ko和两个usb相关的.ko。
复制到板子上,执行insmod xxx.ko,结果g_serial.ko报错。原来是adb和usb serial不能同时用。adb功能是根文件系统里配置的,本想去关掉,群友说用setusbconfig none命令即可。
离线