error LNK2001: が解決できません。 – プログラミング – Home

通知
すべてクリア

[解決済] error LNK2001: が解決できません。


たー
 たー
(@たー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

たー と言います。

「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で開発しています。

よろしくお願いします。


引用未解決
トピックタグ
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 たぶん、その文字変換のAPIとやらのlibを取り込んでないからではないでしょうか?
 その文字変換のAPIとやらのlibはリンクしてますか?

 その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。


返信引用
たー
 たー
(@たー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

NEG(ねぐ)様ありがとうございます。
libはリンクは間違っていないと思います。
通信のAPIも同じエラーが出ていてlibのリンクで解決したので、
同じようにリンクしました。プロジェクト→設定で行っています。
他のリンク方法も試しましたがダメでした。_(._.)_


返信引用
たー
 たー
(@たー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

>その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。
とは?リンクを行う時 又は、ソースを記述する時に注意することがあるのでしょうか?
勉強不足ですいません。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

問題はそのAPIがどのライブラリに入っているかですね。
それはきちんと把握されているのでしょうか?
例えば、リンクしているlib(エクスポートファイル)に
問題のシンボルは入っていますか?
バイナリエディタで見て検索すれば、わかりそうな気がしますけれど。

あと、NEGさんが言われている
「その文字変換のAPIとやらがC++でなくてC言語で書かれてる可能性もあるかと思います。」
の意味は理解できていますか?

C言語とC++言語では、DLLにしたときのエクスポート名の修飾が違います。
エクスポート名が一致しなければリンクは出来ないです。
提供されているライブラリがC言語のものでC++から呼ばれることを想定した作りに
なっていないのであれば、ある程度、使う側で細工しないとうまく行かない可能性が
ありますよ。


返信引用
たー
 たー
(@たー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

PATIO様ありがとうございます。

リンクしているlib(エクスポートファイル)は間違い無いと思います。
(説明書を信じてやっています)
ただ、libファイルを開くと「__imp__iconv_close@4」となっています。
これで良いのか?と言われると判断できません。_(._.)_

>「C言語とC++言語では、DLLにしたときのエクスポート名の修飾が違います。
>エクスポート名が一致しなければリンクは出来ないです」
が該当するように思っています。

細工の行い方は現状分かりません。調べて見ます。


返信引用
た
 た
(@た)
ゲスト
結合: 22年前
投稿: 16
 

>ただ、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で提供されました。
自分でヘッダファイルを編集すればとりあえずリンクはできるようになると思いますよ。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 該当ライブラリのヘッダファイルを以下のようにincludeするとうまくいくかと、、、

extern C
{
#include ~.h
}


返信引用
たー
 たー
(@たー)
ゲスト
結合: 22年前
投稿: 7
Topic starter  

た 様、NEG(ねぐ)様ありがとうございました。
Linkエラーが取れました。

WindowsNT、Visual C++ V6.0のヘルプで理由を確認しました。
本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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