【发布时间】:2023-04-29 08:47:01
【问题描述】:
我正在尝试在 Raspberry Pi 3 B+ 上构建 Eclipse Paho MQTT C 的静态库。作为先决条件,系统上必须有静态版本的 OpenSSL 库。
首先,我尝试使用以下命令获取它:
git clone git://git.openssl.org/openssl.git
cd openssl
git checkout OpenSSL_1_1_1a
./config -static
sudo make install
这确实会在/usr/local/lib 中生成一个libssl.a 文件。但是,当我尝试使用以下命令构建 Paho 的静态库时,它会失败并出现以下错误:
git clone https://github.com/eclipse/paho.mqtt.c.git
mkdir /tmp/build.paho
cd /tmp/build.paho
cmake -GNinja -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_STATIC=TRUE ~/paho.mqtt.c
ninja
/usr/bin/ld: /usr/local/lib/libssl.a(methods.o): relocation R_ARM_MOVW_ABS_NC against ‘a local symbol’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libssl.a: error adding symbols: Bad value
在几个 * 问题中建议的解决方案似乎是使用 shared 标志构建静态 OpenSSL 库:./config shared -static
但即便如此,静态 Paho 库的构建也会失败,并出现完全相同的错误。
我应该补充一点,我在其他硬件架构上使用此过程没有任何问题。这个问题是否与 Raspberry Pi 有任何关系?我该如何解决?
【问题讨论】:
-
请不要发布带有错误消息的图片。相反,将错误消息发布为 text。除其他原因外,这是 Stack Overflow 的规则。见How to Ask。
-
抱歉,错误添加为文本。
-
关于
recompile with -fPIC的“标准”问题。您需要使用该选项编译 OpenSSL。参见例如this answer 关于这样做的可能方式。 -
您是否尝试在您的
cmake命令中添加另一个定义-DCMAKE_POSITION_INDEPENDENT_CODE=ON以启用所有目标的PIC? (建议here)
标签: cmake openssl static-libraries paho ninja