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
- 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]