VC PlusPlus:Link Error LINK2019 未解決のシンボル…で参照されました。 対処方法のソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[VC PlusPlus]]に戻る == '''概要''' == Visual Studioを使うプログラマなら、一度は目にするエラーです。他人が作ったプロジェクトとか複雑なプロジェクトになれば、その遭遇率は高くなります。 これは、基本的にあなたの落ち度ではない事が多いのです。落胆しないで! 対処方法はいくつかのパターンに分かれています。解決が困難なモノもあります。他人のやることなのでね。簡単な対処方法が提供されていないとかあるよ。それでも乗り越えて行く力(チカラ)はあった方がいい。いかなる場合でも冷静に全ての整合性をとるということは、有能なプログラマである証拠だ。 簡単ではないいくつかのパターンについて、ココで一緒に考えていきましょう。 === ''' 対処方法 ''' === '''1.安全ではない古い関数が使われるパターン''' scanf, printf, strlen, strcmpといったC言語の基本とも言える関数を使ったときに発生します。昨今ではオーバーフローしないような、より安全な関数を使うのが定説になっていますが、勉強のため、ためしにgccとか古いVisual Studioで主に開発しているプログラマからプログラムをもらってきたときとかに発生します。古い関数自体は新しいVisual Studioでもコンパイルできるので、関数は新たにobjファイル化することが出来て問題なく使えます。これがlibファイル化された中で呼び出して、使われている場合です。この場合、他のlibファイルの中で古い関数が提供されていて、リンカ設定をしておかないと駄目です。Visual Studioで最初から設定されているリンカ設定されているlibファイルからは、古い関数が消えています。なんで、こんな嫌がらせするのか?と思ってしまいますが、Micorsoftはよく使う関数群を標準ヘッダファイルで定義して内部で持たせるように変更したかったようです。libファイルによる外部ファイル参照を必要とせず扱いたかったんすかね。ナカナカ思い切った互換性を保たない変更です。 プログラマを悩ませる変更をするなんて、アホかと馬鹿かと、愚痴ってもしょうがないです。こういう変更に敏感に対応できてこそプログラマたるプログラマなのだと突き進むしかないのです。 メンドクサイ対応方法としては、入手したlibのソースファイルがあれば、それを入手してすべての関数をscanf_sのような最新のMSVC(MicrosoftVisualCpp)の標準libで提供されている関数を使ってlibファイルを再構築するのがいいのですが、scanf_sに変えて、受け取る文字列のサイズを調整するという作業をすべての基本関数に対して施術しなくてはなりません。それが割かし膨大なプロジェクトである場合、とてもじゃないけど、修正しきれないし、どんなに有能なプログラマでも何度も繰り返して同じことをやるだけにしても、どこかでミスタイプや、計算間違えでバグを起こす原因にもなります。それにそもそもソースが提供されている場合に限ります。 そんな時は旧型対応のライブラリを使いましょう。 *旧型のライブラリを使用して解決! :対処したいプロジェクトをアクティブにした状態で、メニューの[プロジェクト]-[プロパティ]を選択して表示されるダイアログで[構成プロパティ]-[リンカ]-[入力]の[追加の依存ファイル]に ::'''legacy_stdio_definitions.lib''' :を追加します。なんだ、あるんじゃん。古い関数が使われたら、自動的にリンクしろよ。って思ったりもします。でも、本当に古い関数をそのまま使うかはプログラマ側で判断すべし!とMicrosoftは言っています。 続きはまた気が向いたら書くので記事は増えていく予定。 [[VC PlusPlus]]に戻る
VC PlusPlus:Link Error LINK2019 未解決のシンボル…で参照されました。 対処方法
に戻る。
個人用ツール
18.119.157.134
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ