BCCデベロッパーでiconvエラー発生-Rの解決策は?

このQ&Aのポイント
  • BCCデベロッパーを使用してC言語のプログラミングを行っている際に、iconvを使用しようとしたところエラーが発生しました。
  • エラーメッセージによると、'_libiconv_open'、'_libiconv'、'_libiconv_close'が解決できていないようです。
  • このエラーの解決策をご教示いただける方がいらっしゃいましたら、ご教示お願いいたします。
回答を見る
  • ベストアンサー

BCCデベロッパーでiconv

c言語でのプログラミングをBCC developer(windowsXP)で行ってるものです。 iconv.hとインクルードしたくて C:\Borland\BCC55\Include ファイルにlibiconv-1.9.1.bin.woe32にあるincludeファイルにあった iconv.h libcharset.h localcharset.h という三つのファイルをコピペした後、次のプログラムをmakeしてみました #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iconv.h> #define S_SIZE (1024) int main(void) { iconv_t icd; FILE *fp_src, *fp_dst; char s_src[S_SIZE], s_dst[S_SIZE]; char *p_src, *p_dst; size_t n_src, n_dst; icd = iconv_open("EUC-JP", "UTF-8"); fp_src = fopen("index1.txt", "r"); fp_dst = fopen("index2.txt", "w"); while(fgets(s_src, S_SIZE, fp_src) != NULL){ p_src = s_src; p_dst = s_dst; n_src = strlen(s_src); n_dst = S_SIZE-1; while(0 < n_src){ iconv(icd, &p_src, &n_src, &p_dst, &n_dst); } *p_dst = '\0'; fputs(s_dst, fp_dst); } fclose(fp_dst); fclose(fp_src); iconv_close(icd); } すると次のエラーメッセージが出ました。 Error: Unresolved external '_libiconv_open' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ Error: Unresolved external '_libiconv' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ Error: Unresolved external '_libiconv_close' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ ** error 1 ** deleting Debug\test.c.exe 解決策が分かる方、ご指導お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

あ、あと…… >C:\Borland\BCC55\Include ファイルにlibiconv-1.9.1.bin.woe32にあるincludeファイルにあった iconv.h libcharset.h localcharset.h という三つのファイルをコピペ 本来の開発環境のディレクトリにぶちこむのは止めた方がいいです。 追加のインクルードファイルが格納されているパスやライブラリの格納されているパスを指定するオプションが用意されているハズなので、そちらで指定するようにしましょう。 さもないと…… 「ソース一式コピーしてきたのにコンパイルできねぇよ? 追加のインクルードディレクトリもライブラリディレクトリも指定されていないハズなのに」 なんてことになります。

yamada11
質問者

お礼

分かりやすく教えていただきありがとうございました。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>解決策が分かる方、ご指導お願いいたします。 インライン関数だけで実装されているのでない限り、リンクする時にライブラリが必要になるハズですが……。 で、ライブラリをリンカに渡していないから、 >Error: Unresolved external '_libiconv_open' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ >Error: Unresolved external '_libiconv' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ >Error: Unresolved external '_libiconv_close' referenced from C:\BORLAND\BCC55\BIN\TEST.C\DEBUG\TEST.OBJ 「_libiconv_open、_libiconv、_libiconv_closeって関数がないんですけど~?」 とエラーになっています。 配布パッケージにlibディレクトリがあるみたいですから、そちらからライブラリを指定すればよいかと。 # ただし、格納されている.libファイルがBCC developerで使えるライブラリファイルかどうかは不明ですが。

関連するQ&A

  • c言語 iconv

    msys環境で実行して,指定されたファイルの文字コードをShift-JISに変換して表示するコードを作成しているのですがうまく表示されません.何がいけないのでしょうか.第1引数に変換対象のファイル名,第2引数にファイルの文字コードを指定しています. #include <stdio.h> #include <string.h> #include <iconv.h> int main(int argc, char *argv[]) { iconv_t conv; char src[10000]; char dst[10000]; int src_len = strlen(src); int dst_len = sizeof(dst) - 1; char *buf_in; char *buf_out; FILE *fp; fp = fopen(argv[1], "r"); if(NULL == fp) { printf("ファイルを開けません\n"); } else { while(fgets(src, 10000, fp) != NULL) { buf_in = src; buf_out = dst; /* 変換器を作成 */ conv = iconv_open("Shift-JIS", argv[2]); /* 変換 */ iconv(conv, &buf_in, &src_len, &buf_out, &dst_len); *buf_out = '\0'; /* 終末処理 */ /* 文字コード後の文字列を表示 */ printf("%s\n", dst); } /* 変換器を終了 */ iconv_close(conv); /*ファイルを閉じる*/ fclose(fp); } return 0; }

  • BCC Developerについて。

    Borland C++ Compiler、BCC Developerを使って #include <stdio.h> void main(){ printf("Hello C world.\n"); } をメイクしてみたのですが、 インクルードファイル 'stdio.h' をオープンできない 、と表示されコンパイルできませんでした。 環境設定は、コンパイラにbbc32.exeを指定すればいいだけなんでしょうか?よろしくお願いします。

  • BCC Developer メイク時にエラーが発生します。

    皆さんはじめまして、 私はC言語を始めたくて、C初心者の本を2冊買い、 本の解説通りに設定をしていきましたが、 訳の分からんエラーを延々と吐き続けるので挫折しました。 そして私はBCC Developerという物を見つけ、 ↓のURLのサイトの通りに設定し直したのですが、 http://ja2yka.homeip.net/old/aki/freedev.htm また別のエラーが出てきました。 ↓の文を書いてメイクすると #inclube <stdio.h> int main(void) { printf("ハローワールド\n"); return 0; } こうなります↓ > C:\borland\bcc55\Bin\make.exe -fDebug\test0001.mak TARGET MAKE Version 5.2 Copyright (c) 1987, 2000 Borland bcc32 -WC -6 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c C:\programing\test0001\test0001.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland c:\programing\test0001\test0001.c: Error E2048 c:\programing\test0001\test0001.c 1: Unknown preprocessor directive: 'inclube' *** 1 errors in Compile *** ** error 1 ** deleting Debug\test0001.obj Make End !! (Elapsed time 0:00.657) 一体何がいけないのでしょうか? 余談 上記で本を2冊買ったと書きましたが、 いずれも・・・ プログラムはこういう風に動いてますよ的な文章が延々と続く ↓次のページ 早速書いてみましょう!! (環境の設定なんかこれっぽっちも書いてない) こんな感じでした。

  • BCC・stdio.h・_stddef.hのエラー

    BCCと同梱されているstdio.hのエラーなのですが、 stdio.hのエラーは他では出なかったので、 ソース自体がおかしいのかと思っていますが、よく分かりません。 一応ソースを載せます。 #include <stdio.h> int main(int argc, char *argv[]) { if(argv[1] == "") { printf("---(Ver1.00.01)\n"); printf("easy.exe [filename]\n"); printf(" [filename] - ファイル名を指定してください.\n"); } return 0; } これによって次のエラーを吐いてきます。 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 53: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\_stddef.h 72: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 51: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 104: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 105: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 140: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 150: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 151: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 152: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 154: 宣言が正しく終了していない エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 155: ) が必要 エラー E2293 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 156: ) が必要 エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 160: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 161: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 162: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 164: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 165: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 166: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 172: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 173: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 174: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 175: 宣言が正しく終了していない エラー E2141 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 177: 宣言の構文エラー エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 181: 宣言が正しく終了していない エラー E2040 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: 宣言が正しく終了していない エラー E2228 C:\[本名のローマ字表記] Program Files\Borland\bcc32\include\stdio.h 188: エラーあるいは警告が多すぎる stdio.h,_stddef.hのソースは一切変えたりしていません。 また、BCCのエラーは、stdio.hとprintfを抜いて int main(int argc, char *argv[]) { if(argv[1] == "") { } return 0; } としたときに 宣言が正しく終了していない と表示されます。 環境は WindowsXP SP1 BCC Developer です。 よろしくお願いします。

  • BCCのbcc32.cfgファイルとilink32.cfgファイルの設定について

    この前もBCCのことで質問したものです。 BCC5.5を先日インストールしたのですが、PATH設定プログラムのところで疑問があります。 頼りにしているHPを見ながら設定してます。 それだとbcc32.cfgファイルの設定は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" となっているのですが、私の場合は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 同じくilink32.cfgファイルの設定も -L"c:\Borland\Bcc55\lib" となっているのですが、私のは -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 これはこのまま設定してもいいのでしょうか? このままで設定して一度MS-DOSプロンプトで↓のHPの"hello, world" (http://homepage1.nifty.com/tyuuki/old/cc/image/bcc_use_4.png) を試してみたのですが、最後の"test"を入力すると「コマンドまたはファイル名が正しくありません」とでてしまいます。その前までは順調に進みます。 やっぱり設定が違うのでしょうか。 もしくは、MS-DOSプロンプトを起動すると、最初に「コマンドまたはファイル名が正しくありません」と出てしまうのが影響しているのでしょうか。 ちなみにWindows MEを使っています。 初心者の質問なので、長々とわかりにくく書いててすみません。 もし、わかる方がいらっしゃったら教えてください。 よろしくお願いします。

  • bcc55のエラー(cox32.obj)

    コンパイルすると、いつも Fatal:ファイルCOX32.OBJが開けません と言うエラーが出てしまいます。 bcc55のbinフォルダーにbcc32.cfgというファイルを作り、中身に -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" ilink32.cfgには -L"c:\Borland\Bcc55\lib" となっています。 初歩的なことかもしれませんがよろしくお願いします。

  • Borland C++ Compiler 5.5

    コマンドプロンプトにて、「bcc32 -c test.c」と入力すると下記エラーが表示されます。 エラー E2209 test.c 193: インクルードファイル 'stdio.h' をオープンできない エラー E2209 test.c 194: インクルードファイル 'string.h' をオープンできない WEBで検索したら、bcc32.cfgの設定がおかしいと書いてありましたが、特におかしい所が見つかりません。 誰か教えて下さい。 下記はbcc32.cfgの内容です。 -I"c:\borland\bcc55\Include" -L"c:\borland\bcc55\Lib" -L"c:\borland\bcc55\Lib\PSDK" -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 よろしくお願いします。

  • 自作のstrcatが動かない件

    お世話になります。 Wikiペディアに掲載されていたstrcatの実装例(http://ja.wikipedia.org/wiki/Strcat#.E5.AE.9F.E8.A3.85.E4.BE.8B)をそのまま使って、 mystrcatを作ってみましたが、結果が空白になってしまいます。 [ソース] #include <stdio.h> #include <string.h> #include <stdlib.h> char *mystrcat(char *s1, const char *s2) { char *p = s1; while(*s1++); while(*s1++ = *s2++); return p; } void main(){ char *dst; char *p;; char *src1 = "Hello"; char *src2 = "World"; dst = malloc(strlen(src1)+strlen(src2)+1); printf("%s\n",mystrcat(dst,src1)); printf("%s\n",mystrcat(dst,src2)); free(dst); } [実行結果] 空白2行 [期待していた動作] Hello HelloWorld 何が間違っているのか教えていただけると助かります。 標準のstrcatを使うとHelloとHelloWorldが表示されます。 よろしくお願いします。

  • PathIsDirectoryを使って

    #include <windows.h> #include <stdio.h> //#include <Dbghelp.h> #include <shlwapi.h> void main(void) { char *Path = "c:\\windows\\system32\\"; if(PathIsDirectory(Path)) printf("'%s'は正しいディレクトリである。\n",Path); else printf("'%s'は正しいディレクトリでない。\n",Path); } をボーランドC++5.5でコンパイルすると Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'PathIsDirectoryA' が未解決(C:\BORLAND\test.OBJ が参照) というエラーがでました。 どうしたらいいのでしょうか?

  • エラーに関する質問

    Fatal: オプションが必要 : Lc:\Borland\Bcc55\lib ↑のようなエラーが出のですが、解決方法がわかりません 解決方法がわかる方がいましたら教えてください ついでに使ってる開発環境はBCC Developerです ↓は、コンパイル使用としたソースコードと、コンパイルの経過です #include <iostream.h> using namespace std; void main() { int i; int t; int p; char g; while(i=4578){ cin>>p; cin>>g; cin>>t; if(i==t) cout<<"test"; break; }; }; 経過 > C:\borland\bcc55\Bin\make.exe -fDebug\roger.mak INIT TARGET MAKE Version 5.2 Copyright (c) 1987, 2000 Borland echo -WC -3 -Od -w- -AT -pc -H- -k -b -v -y -L"c:\Borland\Bcc55\lib" -DDEBUG -nDebug -c > Debug\roger.rsp echo C:\WINDOWS\デスクトップ\プロジェクト\roger\hyahya.cpp >> Debug\roger.rsp bcc32 @Debug\roger.rsp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland C:\WINDOWS\デスクトップ\プロジェクト\roger\hyahya.cpp: bcc32 -WC -3 -Od -w- -AT -pc -H- -k -b -v -y -L"c:\Borland\Bcc55\lib" -DDEBUG -eDebug\roger.exe Debug\hyahya.obj Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: オプションが必要 : Lc:\Borland\Bcc55\lib ** error 1 ** deleting Debug\roger.exe Make End !! (Elapsed time 0:00.923)

専門家に質問してみよう