ページ 11

64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月29日(月) 18:33
by attMarkCuser123
64bitPCで作成したx64アプリケーションをもとに、同じPCで32bit用アプリケーションを作成しよとしているのですが、
リンカエラーが出てしまいます。なにが問題なのか見当がつきません。どなたかご教授お願いします。

64bitのリンカ設定の状態で32bitをビルドした結果以下エラーが出てしまいます。
エラーは、LINK2019, 2001です。

環境 Windows7 64bitPC, VC++2012, Framework 4.5.50709

よろしくお願いします。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月29日(月) 20:30
by YuO
attMarkCuser123 さんが書きました:64bitのリンカ設定の状態で32bitをビルドした結果以下エラーが出てしまいます。
64bitのリンカ設定というのは,/MACHINEリンカオプションがx64だということですよね。
それは32bitビルドではないと思いますが。
attMarkCuser123 さんが書きました:エラーは、LINK2019, 2001です。
エラーメッセージは正しく書いてください。
Microsoftのリンカはエラーコードとして,LINKではなくLNKをプリフィックスとして使います。そして,
リンカ ツール エラー LNK2001
リンカ ツール エラー LNK2019
どちらも,シンボルの解決ができなかったという内容のエラーです。

環境が変化したことで関数等が存在しなくなった,#if等による切り分け時にスペルミスをした,等がないか確認してみてください。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 08:52
by attMarkCuser123
YuO様、ありがとうございました。

記述ミス申し訳ございませんでした。

初心者で説明がうまくできるか自信がないのですが、
説明に不備があったように感じました。
x64環境でビルド、実行まで確認できているソースなので、
スペルミスはありませんでした。

コンパイルの際、
構成→Debug、プラットホーム→x64 で正常にコンパイルできたソースを、
構成→Debug、プラットホーム→x86 に変更した状態でコンパイルすると、
エラーとなってしまいます。

エラーコードは、LNK2019,LNK2001です。
エラー一覧の説明には、組み込みAPIの関数名が含まれています。
原因と、解決策についてご教授お願いします。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 09:35
by attMarkCuser123
追記です。組み込み用のAPI(Lib)は、x86, x64用のインストールがそれぞれあるので、
32bit用アプリケーションは、この場合、x86PCからでないとビルドできないのでしょうか。
一般的な意見でもよいので、お聞かせ頂けると幸いです。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 13:11
by softya(ソフト屋)
私は64bitOS上で32bitアプリケーションのビルドを問題なく行っています。
一般的には問題無いと思いますので、追加ライブラリなど固有の問題だと思います。
試しに、凄くシンプルなmainだけのprintfかsoutするだけのコンソールプログラムでx86ビルドが通るか確認してみてください。
※ 物事をシンプルにして確認するのは、環境整備/デバッグ/テストの基本事項です。

【補足】
> 組み込み用のAPI(Lib)は、x86, x64用のインストールがそれぞれあるので

それを正しく扱えているかが問題ですが、いま出ている情報では正しく扱えていないとしか思えません。
情報が少なすぎるので、一般論とし言えるのはこれだけです。

Re: 64bitPCから32bitアプあtリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 14:59
by attMarkCuser123
softya様ありがとうございました。
簡単なPGを作成して、64bitPCで 64bit,32bitプラットフォームで正常に動作すること確認できました。

意見をいただき、
組み込みAPIの問題のように思いましたので、32bitPCに環境を構築し
試したいと思います。

ありがとうございました。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 15:30
by softya(ソフト屋)
誤解の無いように書いておきますと、64bitOSにおいてVisualStudioのプロジェクトの設定などを適切に行えば、32bitのアプリケーションは問題なくビルド出来ます。
32bitPCに持っていってビルドする手間も必要ありません。
現状は、attMarkCuser123さんのVisualStudioのプロジェクトの設定で64bitビルドは正しいが32bitビルドはプロジェクトの設定が正しくと言うことになります。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 18:19
by ISLe()
x86の構成にx64ライブラリ用の設定が行われている
→x64とx86ではライブラリへのパスが異なるため見付からない
→x64とx86ではライブラリのファイル名が異なるため見付からない
あるいは、そもそもx86の構成にライブラリ用の設定が行われていない
といったことはないですかね。

例えばx86構成を作るとき、x64構成をコピーすると前者に、新規だと後者になると思います。
最初からx86構成があったとしても、(x64用の)ライブラリの設定をしたとき、すべての構成に対して設定すると前者に、x64構成しかいじってないと後者になると思います。

要するに、ライブラリを使うための設定は適切に行われていますか?ということ。
プロジェクトの設定で、(追加の)ライブラリパスや追加のライブラリの設定を、構成ごとに、確認してください。

ライブラリの使い方を理解していないと環境が変わっても同じ問題にぶつかると思います。
新たに環境を作ってもライブラリを使うための設定をしなければ、x86だろうがx64だろうが関係なく同じエラーが出ます。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 18:20
by attMarkCuser123
softya様詳しい解説ありがとうございました。

32bitPC環境構築後、ビルドしたところ正常完了しました。

32bit版ライブラリを64bitPCに持っていって、ライブラリ設定後、x86でビルドすると正常完了するのでは
ないかと感じました。

念のため試す予定です。

Re: 64bitPCから32bitアプリケーション作成時リンカエラーについて

Posted: 2015年6月30日(火) 19:04
by ISLe()
ライブラリのx86とかx64というのは、作成する実行形式に合わせて使い分けるものです。
開発している環境とは無関係です。