質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

5337閲覧

libcurlを使ったC++のプログラムがコンパイルできない。

SorasoSukhavati

総合スコア17

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/11/01 09:15

実現したいこと。

Windows10でWSLを使って、Ubuntu 18.04.2 LTSでプログラミングをしています。
私が実現したいことは、dllを作って、他のコンパイラでコンパイルしたプログラムから、そのdllを呼び出すということです。そのdllでcurlを用いた通信を予定しています。

現在に至るまでの経緯

まず、libcurlを使うに至ったわけはHTTPポストをしたかったからです。
Windowsでlibcurlのパッケージをインストールする方法がわからなかったので(コマンドプロンプトによるコマンドはできた)、WSLを用いてUbuntuの環境の中でlibcurlをインストールしました。

ここまでなら、何も問題なくUbuntuに元から入っているコンパイラで

g++ *.cpp -l curl -o *.exe ```として、コンパイルすることができました。(*はファイル名) 次に、他のプログラムから関数を呼び出せるようにするため、関数の最初に __declspec(dllexport)をつけてコンパイルしましたが、Ubuntuに元から入っているコンパイラで、はじかれてしまいました。 ```ここに言語を入力 $ g++ *.cpp -l curl -o *.exe *.cpp:16:11: error: expected constructor, destructor, or type conversion before ‘(’ token __declspec(dllexport) int notify( string authorization, string entryMessage )

パソコンに詳しいわけではないので、Ubuntuのコンパイラでは__declspec(dllexport)を認識することはできないと解釈しました。

この時点ではプログラムでcurlを使える状態ではあるが、__declspec(dllexport)を認識しないので、dllを使うことはできないと考えています。

そこで、MinGWをインストールして、__declspec(dllexport)をコンパイルしようと試みましが、今度はcurlで引っかかってしまいました。

$ x86_64-w64-mingw32-g++ *.cpp -l curl -o *.exe *.cpp:5:10: fatal error: curl/curl.h: No such file or directory #include <curl/curl.h> ^~~~~~~~~~~~~ compilation terminated.

curlに関する記述を消してコンパイルした場合は、__declspec(dllexport)を認識し、実行ファイルを作成することができました。現在、このような状態で、次にどうすればよいのかわからないです。どなたかご教授いただけたら幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2019/11/01 09:34

MinGWはwindows上で動作させる為のツール群なので、WSLでの作業と混ぜないでください。 (どちらか片方に統一しないと、ごちゃごちゃになって誰にも解けなくなります。)
asm

2019/11/01 10:00

> dllを作って、他のコンパイラでコンパイルしたプログラムから、そのdllを呼び出す 他のコンパイラとは何でしょうか?
SorasoSukhavati

2019/11/01 10:17

yoorwmさん。 なるほど。それではMinGWを何とかしてアンインストールしたほうがよろしいですね。
SorasoSukhavati

2019/11/01 10:19

asmさん。 他のコンパイラはMQL4というプログラミング言語で使われるコンパイラなのですが、具体的に何が使われているのかは存じ上げません。専用エディターでコンパイルできるようになっています。
dodox86

2019/11/01 10:34

MQL4とは、株トレードの開発環境の言語でしょうか。Windows版なのであれば、WSL/Ubuntu上で共有ライブラリ*.soファイル(≒WindowsのDLL相当)を作っても使えないのではないでしょうか。
guest

回答1

0

ベストアンサー

*.cpp:5:10: fatal error: curl/curl.h: No such file or directory

たんに、そのファイルがない、というエラーです
CurlとかDLLがどーというのは関係ありません

投稿2019/11/01 10:11

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SorasoSukhavati

2019/11/01 10:20

Ubuntuにcurlをインストールしたのですが、MinGWをインストールしたところと別々に保存されているということでしょうか。
y_waiwai

2019/11/01 10:41

他のコメントにもあるように、WSLなのかMinGWなのかWindowsなのかUbuntuなのかはっきりさせましょう。 DLLってのはLinuxにはありませんw
SorasoSukhavati

2019/11/01 10:55

WSLにMinGWとUbuntuがインストールされているのだと思います。 そのMinGWを使ってdllを作成しようとしていたのですが、いろいろやり方が間違っていたみたいですね。
y_waiwai

2019/11/01 11:17

残念ながら、MinGWというのはLinuxにはインストールできません。 そもそもそこらへんから間違ってますね
SorasoSukhavati

2019/11/01 11:37

なるほどですね。それでは私がインストールしたのはMinGWではなくて、コンパイラなんだと思います。x86_64-w64-mingw32-g++こういうファイルがあったので、MinGWをインストールしたのだと思っていました。 結局、WindowsのMinGWにlibcurlを追加しようと方向転換を考えていますが、これは可能でしょうか?
y_waiwai

2019/11/01 11:40

それでいけるでしょう。 WSLをつかう、というとこらへんからおかしくなってるので、そこらへん注意しましょう
SorasoSukhavati

2019/11/01 11:44

はい。windowsでcurlは実行できたのですが、libcurlを追加できそうになかったので、Linuxを使おうと思ったのですが、できるということで安心しました。 ご回答ありがとうございました。
dodox86

2019/11/01 15:56 編集

> x86_64-w64-mingw32-g++こういうファイルがあったので、MinGWをインストールしたのだと思っていました。 そのこと自体はおそらく当たっていると思います。ややこしいことを書きますが、WSL/Ubuntu下でx86_64-w64-mingw32-g++ をインストールすることで、WSL/Ubuntu環境下でMinGWによるWindows 実行ファイルを作成するためのクロスコンパイルはできるようです。ですが、充分に状況を理解して使用しないと質問者さんが最終的に実現したいであろう、Windows用のDLLをMinGWで作成する、ということは難しいので、WSLを使うことは忘れることをお勧めします。
SorasoSukhavati

2019/11/01 16:22

dodox86さん。 ご回答ありがとうございます。libcurlを使いたいと思っていた当初、windowsで出来ないか調べたのですが、よくわからなかったのでWSLを利用する方向で考えました。WSLを利用したらしたで、libcurlは導入できましたが、dllを作成できそうになかったので、行き詰ってしまったという状態でした。 結局、最初のlibcurlをwindowsで使う方法を調べることになるという、まさに振出しに戻ってしまったのが現在の私です笑 今度はパッケージをインストールするとかではなく、curlをコンパイルしないといけないようで、makefileとかbinとかincludeとか、よくわからない状態なので、さらに問題がたくさん出てきました。新しい機能をMinGWにインストールするときの流れなんですが、コマンドプロンプトで、ダウンロードしたフォルダに移動して用意されているmakefileを使って、そこにあるプログラムをまとめてコンパイルしたら、makefileにもともと記載されている手順が順に実行されて、出てきたものをMinGWのどこかに入れるみたいな感じでいいのでしょうか。
dodox86

2019/11/02 03:58

同梱のMakefileなどを使ってご自分でlibcurl.dllをビルド(作成)されても良いですが、スムーズにビルドできなかった場合、(”makefileとかbinとかincludeとか、よくわからない状態”)ですと、対応がかなり大変だと思います。curlの公式サイトを覗くとビルド済みのWindows版curlコマンドやlibcurl.dllが手に入ります。https://curl.haxx.se/windows/ libcurl.dllの利用に関する限りは、こちらを使う方が簡単かつ確実でしょう。実際、私も試してみましたが使えました。
SorasoSukhavati

2019/11/04 15:58

dodox86さん。 ビルド済みのファイルを教えていただきありがとうございます。 MinGWの32bit版と、リンク先のcurl32bit版をダウンロードして、Cドライブ直下のMinGWフォルダの中にbinやincludeや他のファイルを移動させたら、コンパイルすることができるようになりました。現在は、実行時にエントリポイントが見つかりませんと出るので、未だ問題と格闘中ではありますが一歩前進できました。binやincludeについては何となくわかってきましたが、一旦、そういう勉強に励みたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問