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

解決


mel  2002-08-17 20:57:36  No: 50313  IP: [192.*.*.*]

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-18 19:59:22  No: 50314  IP: [192.*.*.*]

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

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

編集 削除
mel  2002-08-19 13:25:04  No: 50315  IP: [192.*.*.*]

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-19 17:30:17  No: 50316  IP: [192.*.*.*]

Debugでは使えますか?

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

編集 削除
mel  2002-08-19 22:14:29  No: 50317  IP: [192.*.*.*]

YuOさん

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

編集 削除
YuO  2002-08-20 13:25:04  No: 50318  IP: [192.*.*.*]

> 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 13:38:24  No: 50319  IP: [192.*.*.*]

皆さんの情報を元にいろいろ調べまくった結果、少し進展しました
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 13:45:09  No: 50320  IP: [192.*.*.*]

YuOさん

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

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

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

編集 削除
mel  2002-08-21 21:19:25  No: 50321  IP: [192.*.*.*]

YuOさん

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

編集 削除