Visual Studio 2017でlibcurlを使おうとして、libcurlのソースからビルドして動かした

Visual Studio 2017でlibcurlを使おうとして、libcurlのソースからビルドして動かした。

Google MapsのGeolocation APIを叩くために、curlコマンドから動かす代わりに、libcurlというライブラリを使って自分で書いたプログラムの中からAPIを使うというのをやりたい。
というか、前に既にやってた

しかしVisual Studio 2017だと古いlibcurlをリンクできなくてエラーになってしまう。最新のlibcurlを使う必要があるようだ。

公式で配布されてるWindows版バイナリはMingw用で、拡張子が.aになっている。
強引に.libにリネームすればリンクできるはずだったが、やってみるとリンクエラーが出る。

結局その配布されているWindows版バイナリはうまくリンクできないので、ソースコードからVisual Studio 2017でビルドしてみた。
しかし、どうもうまくいかない。フォルダ内のVC15フォルダのslnファイルを開いてビルドするだけかと思ったら違うようだ。

ネットで検索してビルドできる方法があるのが見つかった。
Compile libcurl on Windows with Visual Studio 2017 and SSL (WinSSL)

ソースコードのフォルダツリー内のコンフィギュレーション用のbatファイル(buildconf.bat)を実行してからwinbuildフォルダでMakefileをnmakeで指定して動かせばビルドできるらしい。

git clone https://github.com/curl/curl.git

でソースコードを取得し、

buildconf.bat
cd winbuild
nmake /f Makefile.vc mode=dll MACHINE=x64

とすればよいらしい。

しかしzipでダウンロードしたソースだとうまくいかない。Git for Windowsで取ったソースが必要だった。(一緒だと思うのだけど、なぜ?)

gitで取ってきたソースはnmakeでうまくビルドできた。
上記の例だとdll版をビルドしているのだが、自分はstatic版をビルドした。
64bit版と32bit版とをビルドしたが、自分は32bit版を使う。(一緒に使おうとしてるJSON用のJsmnというライブラリのバイナリが32bit版を使っているからだ)
ビルドのコマンドは、このようになる。

nmake /f Makefile.vc mode=static MACHINE=x86

しかししかし、リンクするとこれも最初のバイナリでダウンロードした.aファイルと同様にリンク時にエラーにってしまった。

結局gitで取ってきたソースをnmakeでビルドするときにdll版をビルドした。
dllのビルド方法はこのようにした。

nmake /f Makefile.vc mode=dll MACHINE=x86

dllを呼び出すリンクタイプの.libファイルをリンクする形で利用したらリンクエラーが出ずに無事にlibcurlを使うことができたようだ。
解決だ。

ただし、static版のlibcurlがリンクできない謎が残ってしまった。

libcurlのstatic libのリンクエラーの原因は、内部で使っているlibssh2とか幾つかのライブラリが足らないせいからかなあ、と思ってそれらのライブラリもバイナリ版をダウンロードしてきてリンクをしてみたのだが、未解決のシンボルのエラーが増えた。


あと、Visual Studio 2017の統合環境でstudio.hとかのヘッダーファイルが見つからない問題に遭遇した。普段は統合環境の設定とかの問題を避けるためコマンドラインでnmakeを介してVisual Studioを使うことが多いのだけど、コマンドラインで使う時にはstdio.hが見つからないとかのエラーに遭遇したことないのになあ。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

× 7 = 42