リンク時で、未解決の外部シンボル、どう追えば? – プログラミング – Home

リンク時で、未解決の外部シンボル、どう...
 
通知
すべてクリア

リンク時で、未解決の外部シンボル、どう追えば?


なかがわ しょういち
 なかがわ しょういち
(@なかがわ しょういち)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

7個のCと7個のヘッダーと1個のリソースを
VS2005(Windows XP下)で
ビルドしました。

そうすると、

個々のソースのエラーはなくなり、リソースも通って、
リンクした時に、
下記のエラーが出ました。

perspect(image_in[i], image_out[i], a, b, x0, y0, z0, zr, xr, yr, v, scr);
に対して、
1>WinCImage.obj : error LNK2019: 未解決の外部シンボル _perspect が関数
_MainWinProc@16 で参照されました。

他、
1>WinCImage.obj : error LNK2019: 未解決の外部シンボル _affine が関数
_MainWinProc@16 で参照されました。
1>WinCImage.obj : error LNK2019: 未解決の外部シンボル _rotation が関数
_MainWinProc@16 で参照されました。
1>WinCImage.obj : error LNK2019: 未解決の外部シンボル _shift が関数
_MainWinProc@16 で参照されました。
等のものがいくつか出て、
最後に
1>WinCImage.obj : error LNK2019: 未解決の外部シンボル _MainWndProc@16 が関数
_InitApplication で参照されました。
というエラーがでておます。
InitApplicationに関しては、
BOOL InitApplication(HANDLE);
という設定のし方をしています。

どっかでタイプミスしたのかなあ。
どんな追い方をしていけばいいでしょうか?


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> WinCImage.obj : error LNK2019: 未解決の外部シンボル _perspect が関数
_MainWinProc@16 で参照されました。
> ...

MainWinProcから呼ばれているperspectの実装部が見当たらない(リンクできない)
というてます(他も同様)。

> 7個のCと7個のヘッダーと1個のリソースをVS2005(Windows XP下)で
ビルドしました。

C-codeがC++としてコンパイルされていませんか?
C++としてコンパイルされた場合、シンボルがCとは異なるものになるので
リンクに失敗します。


返信引用
なかがわ しょういち
 なかがわ しょういち
(@なかがわ しょういち)
ゲスト
結合: 16年前
投稿: 3
 

ありがとうございます。
おっしゃること、
後記は、その通りだと思います。
ところで、VS2005で、
C++でコンパイルしているか、
それともC++でコンパイルしているかは、どこで決まるのでしょうか?
それと、VS2005の場合は、リビルドをかければ、
ディレクトリの中の全然の c.、h.、rc.に対して、まとめてコンパイルしてくれ、リンクもかけてくれるようですが、
VC++6でそれをやろうとするなら、
どうすればよいのでしょうか? (単独のソースでしかやったことがないので)
VS2005とVC++6、両方使う時が多いので、お聞きしました。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> C++でコンパイルしているか、
> それともC++でコンパイルしているかは、どこで決まるのでしょうか?

拡張子/コンパイル・オプション/extern Cの有無 で決まります。

> VC++6でそれをやろうとするなら、どうすればよいのでしょうか?

VC++6はとうの昔に捨てたのでわかりません。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>C++でコンパイルしているか、
>それともC++でコンパイルしているかは、どこで決まるのでしょうか?

特にオプションの指定の無い場合はソースの拡張子ですが、
普通はコンパイルオプション

 /TC Cとしてコンパイル
 /TP C++としてコンパイル

で決まります。とマニュアル「コンパイルオプション」項にあります。
これを指定するのはプロジェクトのプロパティです。

>VC++6でそれをやろうとするなら、

VS6.0にもリビルドはあります。
VSを立ち上げてメニューを見ればすぐわかることですけど(笑)。


返信引用
なかがわ しょういち
 なかがわ しょういち
(@なかがわ しょういち)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

みなさん。
ありがとうございます。
とりあえず、VS2005の方で、
コンパイルオプションが、やはり、
ご指摘のように、
C++になっていたので、
Cに変えてみました。
でも、現象は変わらずで、
依然、先と同様のリンクエラーが出ます。
タイプミスもないようなんですが、
逆に、上記のperspectなどと言う関数は、別ソースなり別ヘッダーなりで、
どんな形で指定されていないといけないのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

> C++になっていたので、
> Cに変えてみました。

で、re-build したんですよね?


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>逆に、上記のperspectなどと言う関数は、別ソースなり別ヘッダーなりで、
>どんな形で指定されていないといけないのでしょうか?

コンパイルエラーが出てないのだから、ヘッダー
は揃っているのでしょう。
足りないのは*.libです。

パースペクト変換やアフィン変換など、3Dに関係するライブラリが
どこかにあり、それをプロジェクトに追加してないだけのように
思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました