
こんにちわ。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
VBAにてメール作成した際、一部...
-
Vba UserFormを前面に出す方法...
-
寿命
-
COBOLでBLOCK CONTAINS句につい...
-
OS入ってる機器のソフト・アプ...
-
自動クエリとはどういうもので...
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
モジュール、アプリケーション...
-
CASLIIのプログラム(並び替え...
-
Excelで4096点以上のFFTの方法
-
n88basicからwindows版Basicへ...
-
eepromについて
-
AtCoder プログラムにまだまだ...
-
C言語でのaccess violationに...
-
winsock 2.0 のデータ伝送速度は?
-
列と行の名前(重複あり)が交...
-
有志の方に質問です。 2021年度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
OS入ってる機器のソフト・アプ...
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
銃を発砲するならともかく、日...
-
VBAにてメール作成した際、一部...
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
UWSCで指定のフォルダを開きたい。
-
XnViewにwebpを「いつも開く」...
-
Excelに埋め込んだVBAのプログ...
-
「Outlookが他のプログラムによ...
-
visual studio 2019を使ってい...
-
未使用の変数を一括検索する方法
-
powered byの表記について
-
VBAでユーザーフォームが自動的...
-
画像を読み込むのと取り込むの...
-
VC++コンソールアプリでウイン...
-
Google カレンダーの商用利用
おすすめ情報