サンプルプログラムのリンクエラーについて

解決


mel  2002-08-18 05:57:36  No: 50313

VC++ 6.0 にMS SQL Serverにあったサンプルプログラムをコピぺして
ビルドすると以下のエラーがでます。

bcpw.obj : error LNK2001: 外部シンボル "_bcp_exec@8" は未解決です
bcpw.obj : error LNK2001: 外部シンボル "_bcp_init@20" は未解決です
Release/bcpw.exe : fatal error LNK1120: 外部参照 2 が未解決です。

ヘッダファイルもライブラリも必要なものは選択されているのですが
あるページでは呼び出し規約が違うような情報があったので _cdecl
_stdcall _fastcall と替えてみたのですが全く症状がかわりません
該当する関数部分を // でビルドするとビルドできてしまいます。
何が問題なのでしょうか? コード自体はMSのものなので間違っていな
いと思いますのでコンパイラの設定だと思うのですがいろいろやっても
解決せず手詰まり状態です。 よろしくお願い致します。


war  2002-08-19 04:59:22  No: 50314

bcp_execとbcp_initという関数が定義されていないだけではないでしょうか?
@がついているのでDLLを呼んでいるかも?

# サンプルは確認しておりませんので違ったらごめんさい。


mel  2002-08-19 22:25:04  No: 50315

war さん

アドバイスありがとうございます。m(__)m
bcp_exec と bcp_init は 
インクルードしている odbcss.h の中に以下の記述がありまして

RETCODE    SQL_API bcp_exec (HDBC, LPDBINT);
RETCODE    SQL_API bcp_init (HDBC, LPCSTR, LPCSTR, LPCSTR, INT);

ライブラリは [プロジェクト]⇒[設定]⇒[リンク] にある
odbc32.lib odbccp32.lib でbcp_exec と bcp_init が使えると言う認識
なのですがさらに別の設定が必要なのでしょうか?


YuO  2002-08-20 02:30:17  No: 50316

Debugでは使えますか?

デバッグ用設定はしてもリリース用の設定を忘れるのは結構あることだと思いますので。


mel  2002-08-20 07:14:29  No: 50317

YuOさん

どうもありがとうございます。m(__)m
構成をDebugに変えても全く同じメッセージが出ます。
どうも,bcp_exec と bcp_initがライブラリに無いようなきがしてならない
のですが、lib にどのような関数が含められているかを調べるツールなどは
VC++の中にあるのでしょうか?ヘルプを見てみたのですがわかりませんでし
た。


YuO  2002-08-20 22:25:04  No: 50318

> lib にどのような関数が含められているかを調べるツールなどは

本来の目的からは異なりますが,
dumpbinに/relocationsオプションを付けて調べることが出来ます。

それでもって,
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbcsql/od_odbcsamp_4pm8.asp
には,
>To build the application, you must ensure that 3.x versions of the ODBC header files and libraries are used, that the SQL Server 2000 version of Odbcss.h is used, and that the linker can find Odbcbcp.lib.
という文がありますが。


mel  2002-08-20 22:38:24  No: 50319

皆さんの情報を元にいろいろ調べまくった結果、少し進展しました
SQL Server 2000のCDROMにある odbcbcp.lib をリソースファイル
として加えると bcp_exec に関してはlinkエラーがでなくなりました。
しかし bcp_init が相変わらずです。 bcp_exec と bcp_init が別の
LIBに入っているとは考えにくいので謎は深まるばかりです・・・・

それと、SQL Server 2000のCDROMを見るとDB-Library for C と
言うものが存在しているようなのですが、それが何なのかどのように
利用するのかがいまいちわかりません、もし教えていただける方が
いらっしゃいまいしたらよろしくおねがいいたします。
やろうとしていることは bcp コマンドの簡易版プログラムの作成
です。VC++のスキルが低い上にSQL関係の情報が少なく悩んでいます。


mel  2002-08-20 22:45:09  No: 50320

YuOさん

わたしが発言を書いている間に、書き込んでくださったようで失礼しました。

dumpbin を早速ためしてみます。
参考になる URLもありがとうございます、今から確認してみます。

ほんとうにありがとうございます。


mel  2002-08-22 06:19:25  No: 50321

YuOさん

URLで出てくるのは英語のページ! なのですがめげていては解決はないと腹をくくって 呼んだ結果 SQL 2000のCDROMにサンプルプログラムがあるらしいことがわかり、早速追加のインストールで全てのオプションを選びましたらbcp.dsw なるズバリのワークスペースファイルがでてきました。ただ MFCでのコーディングでコンパイルすると定数が定義されていないと言うようなエラーがでてきます、コード自体がMFCで難解であるためVC++のスキルアップ
ほうが順番的にさきのようです。 とほほな結果になってしまいました
みなさんありがとうございました。DB系プログラミングの難しさが良くわかりました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加