尝试 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 配置的前缀路径。
我已经构建了 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 配置的前缀路径。