たー と言います。
「error LNK2001: 外部シンボル "int __stdcall iconv_close(void *) (?
iconv_close@@YGHPAX@Z) は未解決です」
と言うリンクエラーがとれません。
現在開発中のソフトのために、通信系のAPI、文字変換のAPIをCDで提供されました。
通信のAPIは使用できるのですが、文字変換のAPIはリンクエラーになってしまいます。
文字変換のAPIヘッダ、libを取り込んでいるのですがリンクエラーになります。
(文字変換のAPIは全て同じリンクエラーになってしまいます)
通信のAPIヘッダ、libを取り込んでエラーはでません。
開発環境は、WindowsNT、Visual C++ V6.0
Win32 Applicationで開発しています。
よろしくお願いします。
たぶん、その文字変換のAPIとやらのlibを取り込んでないからではないでしょうか?
その文字変換のAPIとやらのlibはリンクしてますか?
その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。
NEG(ねぐ)様ありがとうございます。
libはリンクは間違っていないと思います。
通信のAPIも同じエラーが出ていてlibのリンクで解決したので、
同じようにリンクしました。プロジェクト→設定で行っています。
他のリンク方法も試しましたがダメでした。_(._.)_
>その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。
とは?リンクを行う時 又は、ソースを記述する時に注意することがあるのでしょうか?
勉強不足ですいません。
問題はそのAPIがどのライブラリに入っているかですね。
それはきちんと把握されているのでしょうか?
例えば、リンクしているlib(エクスポートファイル)に
問題のシンボルは入っていますか?
バイナリエディタで見て検索すれば、わかりそうな気がしますけれど。
あと、NEGさんが言われている
「その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。」
の意味は理解できていますか?
C言語とC++言語では、DLLにしたときのエクスポート名の修飾が違います。
エクスポート名が一致しなければリンクは出来ないです。
提供されているライブラリがC言語のものでC++から呼ばれることを想定した作りに
なっていないのであれば、ある程度、使う側で細工しないとうまく行かない可能性が
ありますよ。
PATIO様ありがとうございます。
リンクしているlib(エクスポートファイル)は間違い無いと思います。
(説明書を信じてやっています)
ただ、libファイルを開くと「__imp__iconv_close@4」となっています。
これで良いのか?と言われると判断できません。_(._.)_
>「C言語とC++言語では、DLLにしたときのエクスポート名の修飾が違います。
>エクスポート名が一致しなければリンクは出来ないです」
が該当するように思っています。
細工の行い方は現状分かりません。調べて見ます。
>ただ、libファイルを開くと「__imp__iconv_close@4」となっています。
ということはライブラリ側が期待している宣言はこう(↓)ですね。
extern C __declspec( dllimport ) int WINAPI iconv_close( void * );
>error LNK2001: 外部シンボル "int __stdcall iconv_close(void *) (?
>iconv_close@@YGHPAX@Z) は未解決です」
ところがこのエラーメッセージですと、ヘッダファイルにはこう(↓)書かれていますか?
int WINAPI iconv_close( void* );
ということはつまりライブラリと一緒に提供されているヘッダファイルが間違っているのです
ね。
>現在開発中のソフトのために、通信系のAPI、文字変換のAPIをCDで提供されました。
自分でヘッダファイルを編集すればとりあえずリンクはできるようになると思いますよ。
該当ライブラリのヘッダファイルを以下のようにincludeするとうまくいくかと、、、
extern C
{
#include ~.h
}
た 様、NEG(ねぐ)様ありがとうございました。
Linkエラーが取れました。
WindowsNT、Visual C++ V6.0のヘルプで理由を確認しました。
本当にありがとうございました。