はじめて質問させていただきます。
当方、これまでVC5を使ったCプログラムを作成していたのですが、
やっと重い腰を上げて、VC6に移行しようと考えたのですが、
以下のようなエラーが発生して、ビルドが通りません。
何かご存知の方おられましたら、アドバイスお願いします。
AAA.obj : error LNK2001: 外部シンボル _BBB は未解決です
CCC.lib(DDD.obj) : error LNK2001: 外部シンボル _EEE は未解決です
プログラムの構成としましては、自作のCのいくつかのlibを、
リンクしているCプログラムなのですが、自作のlibのリンクが
全てエラーとなってしまっているようです。
VC5の時から何も変更をしていないのですが、
何か変更が必要なのでしょうか。
よろしくお願いします。
とりあえず、リンクに関する設定をやり直してからリビルドしてみてください。
tib様、さっそくのご回答ありがとうございます。
リンク設定のやり直し、および、プロジェクトファイルの
再作成を行ったのですが、現象変わりませんでした。
環境を忘れていましたので、報告します。
Windows2000、VC6.0(SP5)です
CでコンパイルしたlibのヘッダーをC++のソースにincludeしていませんか?
dairygoods様、ご回答ありがとうごさいます。
当方、C++を知らないもので、全てCのみのソースコードで、
C++は使っておりません。
debugのプロジェクト設定で
ライブラリのリンクを設定して
releaseでビルドしてるとか。
HERTS様 ご回答ありがとうございます。
ご指摘の件、確認致しましたが、問題ありませんでした。
もともと、VC5では(debug、release問わず)ビルドが
通っておりますので、設定等にミスは、無いと思っております。
libへのパスは通っていますか?
ツール
→オプション→ディレクトリタブ
→表示するディレクトリをライブラリファイルに変更
→下のリストにlibへのパスを通す
てつや 様 ご回答ありがとうございます。
ご指摘の件、ライブラリファイルの設定欄に、今回のlibのパスは通っております。
lib を VC6 でビルドしなおしてないとか?
渋木宏明(ひどり) 様、ご回答ありがとうございます。
libは、VC6でコンパイルしなおしております。
libは、問題無くコンパイルできたので、exeも大丈夫かなと
思ったのですが、何か違いがあるようです。
ふと気になったのですが、
Cのソースと言うのは、ソース上Cの関数しか呼んでいないという事で
コンパイラがCのソースとしてコンパイルしているわけはないという事はないでしょ
うか?
Cのソースであれば、C++としてコンパイルしても通ってしまいそうな気がするですが。
Cとしてコンパイルさせるための設定とかソースファイルの拡張子を.cでしている等々
をされているのでしょうか?
> Cとしてコンパイルさせるための設定とかソースファイルの拡張子を.cでしている等々
> をされているのでしょうか?
あるいはライブラリのヘッダに:
#ifdef __cplusplus
extern C {
#endif
...
#ifdef__cplusplus
}
#endif
ってなオマジナイが唱えられているか、とか。
>ツール
> →オプション→ディレクトリタブ
> →表示するディレクトリをライブラリファイルに変更
> →下のリストにlibへのパスを通す
これだけではライブラリへのパスを指定したことにしかなりません。
明示的に目的のライブラリファイルを指定する必要がありますが...
http://forums.belution.com/ja/vc/000/196/22s.shtml
この類の話は、やはり DUMPBIN.EXE でも使って理詰めで解決したほうが
いいと思います。
まず、関数名がライブラリ側(DUMPBINの出力)と呼び出し側(リンクエラーの出力)
で同じになっているかどうか。
・同じならパス指定ミス
・違っていればソースの記述ミス
違っている場合、どのように違っているかを見れば、
どう間違えているかもだいたい想像できますしね。