0

paho_mqtt.cWindows X86 (64 ビット) でビルドしようとしています。Visual Studio Community 2013 を使用しています。サポートされている構成です。

64 ビット用にビルドするpaho_mqtt.cには、Windows 64 ビット用にコンパイルされた OpenSSL が必要です。OpenSSL をビルドするには、新しいバージョンの Active Perl が必要であることがわかりました。次に、次のコマンドを使用して OpenSSL を構築しました。

  • perl 構成 -no-asm VC-WIN64A
  • nmake
  • nmakeテスト

すべてのテストが機能したので、SSL/TLS ライブラリが機能していると確信しています。

MQTT paho をビルドするときに、ssl.h. 以下にリストされているこのページのトリックを使用して環境変数を設定し、msbuild が環境変数からインクルード パスを取得するようにしました。

コマンド ラインからコンパイルするときに追加のライブラリとインクルード パスを追加する

それは機能し、paho は ssl.h を見つけました。

次の paho.mqtt.c の msbuild は、libeay32 / ssleay32.dll を見つけることができませんでした。最初に、msbuild が openssl ライブラリの正しいディレクトリを検索するように、上記のトリックを再度使用しました。新しいライブラリは機能しますが、ライブラリ名が異なります。Windows、Linux、および Macintosh 用の OpenSSL のコンパイルに関する 2) の情報を使用し、次のことを行いました。

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