尝试 link 在 VMWare 共享文件夹中打开 SSL 时外部未解析

Unresolved external when trying to link openSSL in a VMWare shared folder

我已经构建了 openSSL 并将静态库置于版本控制之下(共享对象不是一个选项)。

当我尝试构建驻留在 vmware Ubuntu VM 的共享文件夹中的项目时,它向我抛出各种未解决的外部问题,这似乎源于 'being unable to find libcrypto.a'。

然而,奇怪的是,如果我将完全相同的文件夹复制到本机硬盘,一切正常。

我正在使用 QMake 作为生成文件生成器。 传递给命令行的(截断的)命令如下:

arm-none-linux-gnueabi-g++ -o ../../../build/appl .obj/src/appl.o -L/mnt/hgfs/Programming/Project/Modules/build/ARM -L/mnt/hgfs/Programming/Project/ThirdParty/lib/ARM -L/mnt/hgfs/Programming/Project/build/ /mnt/hgfs/Programming/Project/build/libCore.a -lSQLite -lJSON -lcurl -lssl -lcrypto -lpthread -lrt -lz

列出的所有库都是静态库,appl 是生成的二进制文件。

错误消息包括:

/mnt/hgfs/Programming/Project/build/libCore.a(Task.o): Task.cpp:(.text+0x298): undefined reference to `EVP_aes_256_cbc'
Task.cpp:(.text+0x145c): undefined reference to `EVP_sha1'

还有很多类似的。是的,我确信该库可用且可读,因为如上所述,只要完成链接,链接就可以正常工作 'natively'.

我的主机操作系统是 Windows,Ubuntu 是来宾。

知道这可能是什么原因吗? 谢谢。

我还没有找到最初问题背后的原因,但我找到了解决方法。 使用 GNU Buildtools,您可以将两个 openSSL 库合并为一个静态库,然后 link 取而代之。

为此,我使用 this link 作为基本说明。为此,我的 openSSL 构建脚本(在 Python 中)现在具有以下额外步骤:

subprocess.run(["ar", "-M" ], input="\n".join([
    "create "+ os.path.join(libDir, 'libOpenSSL.a'),
    "addlib "+ os.path.join(installDir, 'lib', 'libcrypto.a'),
    "addlib "+ os.path.join(installDir, 'lib', 'libssl.a'),
    "save",
    "end"
]), text=True, check=True)

libDir 是您希望生成的文件所在的位置,installDir 是您传递给 openSSL 配置的前缀路径。