0

我正在尝试paho_mqtt.c在 Windows X86(64 位)上构建。我正在使用 Visual Studio Community 2013。它是受支持的配置。

要为 64 位构建paho_mqtt.c,需要为 Windows 64 位编译的 OpenSSL。为了构建 OpenSSL,我发现我需要一个新版本的 Active Perl。然后我使用以下命令构建 OpenSSL:

  • perl 配置 -no-asm VC-WIN64A
  • 制作
  • nmake 测试

所有的测试都有效,所以我相信我有工作的 SSL/TLS 库。

在构建 MQTT paho 时,它找不到ssl.h. 我使用下面列出的此页面上的技巧来设置环境变量,因此 msbuild 将从环境变量中获取包含路径:

从命令行编译时添加额外的库和包含路径

这有效,paho 找到了 ssl.h。

paho.mqtt.c 的下一个 msbuild 找不到 libeay32 / ssleay32.dll。首先,我再次使用了上面的技巧,因此 msbuild 将在正确的目录中搜索 openssl 库。尽管新库可以工作,但库名称不同。我使用了 2) 中关于为 Windows、Linux 和 Macintosh 编译 OpenSSL的信息,并执行了以下操作:

cp libssl.lib libeay32.lib
cp libcrypto.lib ssleay32.lib

我知道这是有问题的,但它似乎奏效了;也就是说,失败的链接命令现在运行时没有警告或错误。但它可能只是将任何未解决的符号问题推迟到以后。

稍后尝试链接可执行文件时 msbuild 失败(显示在本文底部)。msbuild 抱怨它无法解析 MQTTClient_* 功能/符号(例如 MQTTClient_connect)。这些函数都在 MQTTClient.c 中,并且 msbuild 构建了 MQTTClient.obj 没有发出任何错误。

我的问题围绕着“真正的问题是什么?”:

  • 是 MQTTClient.obj 的问题吗:
    • 也许它不包含在链接命令中?
    • 或者符号不在目标文件中?
  • 是我重命名库的问题吗?

msbuild 没有报告它找不到 MQTTClient.obj。如果问题出在 openssl 库上,我希望它会报告找不到一些 openssl 符号。

在 linux 上,我会使用 nm -g 查看未定义的符号是否在 MQTT_Client.obj 中。如何在 Windows 中验证这一点?

感谢您的任何帮助,您可以提供,


Link:
  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\link.exe /ERRORREPORT:QUEUE /OUT:"C:\Users\don\paho.mqtt.c\Windows Build\x64\Release\paho-cs-pub.exe" /INCREMENTAL:NO /NOLOGO /LIBPA
  TH:"C:\Users\don\paho.mqtt.c\Windows Build\\x64\Release" "paho-mqtt3a.lib" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc3
  2.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"C:\Users\don\paho.mqtt.c\Windows Build\x64\Release\paho-cs-pub.pdb" /SUBSYSTEM:CONSOLE /O
  PT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\don\paho.mqtt.c\Windows Build\x64\Release\paho-cs-pub.lib" /MACHINE:X64 x64\Release\paho_cs_pub.obj
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_create [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_yield [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_setCallbacks [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_disconnect [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_publish [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_destroy [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
paho_cs_pub.obj : error LNK2001: unresolved external symbol MQTTClient_connect [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
C:\Users\don\paho.mqtt.c\Windows Build\x64\Release\paho-cs-pub.exe : fatal error LNK1120: 7 unresolved externals [C:\Users\don\paho.mqtt.c\Windows Build\stdoutsuba\stdoutsuba.vcxproj]
4

0 回答 0