←調子こいた結果リンクエラーの迷宮に迷い込んでしばらく帰ってこれなかった人

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

←調子こいた結果リンクエラーの迷宮に迷い込んでしばらく帰ってこれなかった人

投稿記事 by MoNoQLoREATOR » 11年前

みなさんこんにちは。
ご無沙汰しております。

OpenGLを使ったクラスプラットフォームな開発。
正直ナメてました。

調子ぶっこいてプログラム打ってたらリンクエラーの迷宮に迷い込んでしまいました。
とりあえずそのままビルドすると

CODE:

~は既にLIBCMTD.libで定義されています
というリンクエラーが出るためLIBCMT.lib/LIBCMTD.libを無視する設定にします。

すると当然、そのライブラリで定義されているものは使えなくなるわけですが、std::stringなどのコンテナクラスを一つでもインクルードしようものなら

CODE:

未解決の外部シンボル__CrtDbgReportWが関数~(省略)~で参照されました
というリンクエラーが出てしまいます。

その横に『libcpmtd.lib(stdthrow.obj)』などと書かれているものですから、LIBCMT.lib/LIBCMTD.libの時と同じように、ライブラリを無視する設定を追加すればいけるのでは?というわけのわからない考えが頭をよぎったが最後、

「libcpmtd.libを無視する設定にする」→大量のリンクエラー

まあ当然の結果です。

しかしそこで方向転換しないのがモノクロ クオリティ(ちょ
”さっき表示されてた別のライブラリを無視すればよいのでは??”という理論性の欠片も無い発想に突き動かされ、

ライブラリを無視する→それに依存するライブラリ内でエラーが発生する→そのライブラリも無視してしまえ!→以後繰り返し

という無限の迷宮に自ら入り込み、危うくVisualStudioの全ての標準ライブラリを無視する設定を作り上げてしまうところでした。
まあ途中で正気に戻って、どうやらstd::stringなんかが__CrtDbgReportWを使っているらしいということを突き止め、std::stringを使わないようにすればエラーが出なくなるのではないかという結論にやっとこさ至ったのでした。

しかし不便ですね。
まあしょうがないのでコンテナクラスを使いたくなったら自分で作ることにします。


それと、VisualStudioの設定の仕方がよくわかりません。
というのも、WinMainなんて書いてたら明らかにクロスプラットフォームなソースコードではないわけです。
だから「コンソールプロジェクトではなくWin32プロジェクトだがエントリーポイントはmainである」という設定にしたいのですが…できませんでした!

エントリーポイントという項目は見つけたのですが、どんな値を入力すれば良いのかわかりません…。
逆にコンソールプロジェクトで作成してサブシステムをWINDOWSに設定すればいいんじゃないかと考えてやってみたのですがエントリーポイントが強制的にWinMainになってしまうようです。

今日はもう遅いので、これについての調査はまた今度ですね。


今回は以上です。
それでは楽しいプログラミングライフを!
最後に編集したユーザー MoNoQLoREATOR on 2014年8月03日(日) 23:29 [ 編集 2 回目 ]


アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前

Re: ←調子こいた結果リンクエラーの迷宮に迷い込んでしばらく帰ってこれなかった人

投稿記事 by h2so5 » 11年前

たぶんランタイムライブラリの設定が間違ってます。
http://oshiro.bpe.es.osaka-u.ac.jp/peop ... sp_content

エントリポイントを変更する方法は
http://stackoverflow.com/a/11785733

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: ←調子こいた結果リンクエラーの迷宮に迷い込んでしばらく帰ってこれなかった人

投稿記事 by MoNoQLoREATOR » 11年前

>>みけCATさん
いや意味わかんないです。

>>h2so5さん
ありがとうございます。
なるほどそこの設定が食い違っているとこの症状が出るのですか。
マルチスレッドDLLの方に設定したらリンクエラーが解決しました。

エントリポイントの問題は…解決した…だと…!?
おかしいな~この前やったときはプラグマコメントさんが全く機能してくれなかったんだけどな~