こんにちわ。
UNIXのC++でPro*Cを使って動的SQLを使ったプログラムを作っています。
プログラムコードは出来上がっていて、単独コンパイルは通るのですが、
実行形式のプログラムを作る時のリンクで「未定義のシンボル」として
以下の4ライブラリ関数がエラーになります。
sqlald()関数、sqlprc()関数、sqlnul()関数、sqlclu()関数
これはおそらく、リンクする際にこれらの関数が含まれているライブラリを
リンクできていないだけなのではないかと思っているのですが、
肝心のライブラリがどこのどれなのかがわかりません。
どなたかご存知の方がいらっしゃいましたら、教えてください。
もしかして、プログラム中でもこれらの関数をextern する以外に
何か必要なのでしょうか?
No.1ベストアンサー
- 回答日時:
> もしかして、プログラム中でもこれらの関数をextern する以外に
> 何か必要なのでしょうか?
という文から察するに、あなたのプログラムには
extern int sqlald();
なんて行を書いているのですね?
これが悪いんです。C++ は、関数のオーバロードができますから、引数の個数や
型が違えば、違った関数とみなされます。
きちんと、Pro*C で用意されているインクルードファイルをインクルードして、
自前のプロトタイプ宣言は削除して下さい。
# 私は、一応計算機屋さんなのですが、Pro*C 未経験なので自信無しです。
すばらしいです!!
さすがです!!
こちらでも、同時進行でわが社のプロフェッサーさんから
アドバイスを受けて原因がわかりかけていたところに、くまさんからの
お返事を拝見させていただきました。
御察しのとおり、extern int sqlald();を記述していました。
手元にPro*Cプログラマーズ・ガイドがあり、それを手本にしてきたのですが、これはそもそも標準C言語から使用する場合のことが載っていたのでした。
やはり、プロフェッサーさんからも問題のexternの部分を指摘されていて、
これらのextern文全てを
#extern "C" {
}
で囲むことを教わりました。これでコンパイルもリンクも通ってプログラムも動くようになりました。
が、くまさんのアドバイスを見たところ、
>きちんと、Pro*C で用意されているインクルードファイルをインクルードして、
>自前のプロトタイプ宣言は削除して下さい。
と書かれていたので早速、grepを使って定義されているインクルードファイルを探してみました。
そしたら、sqlcpr.hというファイルが見つかり、さらにその中で先ほどの
#extern "C" {
}
が使われていました。さらに、この定義を生かす為に、
#ifdef __cplusplus で囲われていたので、コンパイルオプションに
「-D__cplusplus」を追加してみました。
そしたら、自作のextern文を削除してもうまく動くようになりました。
本当に、すばらしいです!!
ありがとうございました。
ポイント30くらいあげたいところですが、あげられないようなので20ポイント!!です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
これってほんとにみますか?
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
自作のプログラムがウイルスと...
-
PICマイコンのコピー(クローン...
-
Application.ScreenUpdatingが...
-
Excelに埋め込んだVBAのプログ...
-
ドロップダウンリストの文字を...
-
javaで特定の文字のカウントを...
-
python変数の使い方について
-
「Outlookが他のプログラムによ...
-
写真のプログラムは、1からnま...
-
C言語 バッファについて。
-
NC旋盤の原点設定
-
VC++でプログラムの多言語化を...
-
VBAにてメール作成した際、一部...
-
読み込み中にアクセス違反が発...
-
グラフをC#のASP.net MVCで表示...
-
グラフィックボードにウイルス...
-
COBOLの連絡領域について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelに埋め込んだVBAのプログ...
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
VBAにてメール作成した際、一部...
-
「Outlookが他のプログラムによ...
-
PICマイコンのコピー(クローン...
-
モジュール、アプリケーション...
-
XnViewにwebpを「いつも開く」...
-
VBAでユーザーフォームが自動的...
-
良いプログラム、悪いプログラ...
-
自作のプログラムがウイルスと...
-
main関数を先頭に置くデメリット
-
ドロップダウンリストの文字を...
-
javaで特定の文字のカウントを...
-
未使用の変数を一括検索する方法
-
特定のwebサイトのタイトルや記...
-
COBOLの連絡領域について
-
exeファイルしかないプログラム...
-
エクセルとワードをデスクトッ...
-
AutoCADを用いて板金展開図を自...
おすすめ情報