我正在尝试在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
这会在libssl.a
中产生一个/usr/local/lib
文件。但是,当我随后尝试使用以下命令构建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
[在几个Stackoverflow问题中针对此问题的建议解决方案似乎是使用shared
标志构建静态OpenSSL库:./config shared -static
但是即使那样,静态Paho库的构建也会失败,并出现完全相同的错误。
我应该补充一点,在其他硬件体系结构上,此过程没有任何麻烦。这个问题可能与Raspberry Pi有关吗?我该如何解决?
CFLAGS=-fPIC ./config shared -static
似乎已用于OpenSSL。但是,在构建完静态Paho MQTT C库(完成而没有任何错误)之后,在任何地方都找不到静态库。
[然后查看/usr/local/lib
,我只会在其中找到动态.o库,而没有静态.a库。为什么这在Pi上不起作用,但在其他系统上却可以正常工作?