VC++ 2010 での測域センサのプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KOKO
記事: 3
登録日時: 13年前

VC++ 2010 での測域センサのプログラム

#1

投稿記事 by KOKO » 13年前

測域センサ UBG-04LX-F01 を研究で使おうと考え、公式のサポートサイトであるURG Helperの手順に従い、
サイトにサンプルとして載っていたものをプロジェクトファイルを使ったコンパイルの方法で行ったのですが、
エラーが出てしまい、urg.libに何らかの問題があるのだろうということ以外は何もわからず、途方に暮れている状況です。
実際に動かしている方の意見や、解決策として考えられることを教えていただきたいです。

開発環境は
Windows7 (32bit)
Visual C++ 2010 Express
です。

・ プログラム
// シリアル接続でのセンサとの接続と距離データの取得
#include "urg_sensor.h"
#include "urg_utils.h"
#include <stdlib.h>

int main(void)
{
urg_t urg;
int ret;
long *length_data;
int length_data_size;

// "COM1" は、センサが認識されているデバイス名にする必要がある
const char connect_device[] = "COM3";
const long connect_baudrate = 115200;

// センサに対して接続を行う。
ret = urg_open(&urg, URG_SERIAL, connect_device, connect_baudrate);
if (ret < 0) {
// todo: check error code
return 1;
}

// データ受信のための領域を確保する
length_data = (long *)malloc(sizeof(long) * urg_max_data_size(&urg));
// todo: check length_data is not NULL
// センサから距離データを取得する。
ret = urg_start_measurement(&urg, URG_DISTANCE, 1, 0);
if (ret < 0) {
// todo: check error code
return 1;
}
length_data_size = urg_get_distance(&urg, length_data, NULL);
if (length_data_size <= 0) {
// todo: check error code
return 1;
}
// todo: process length_data array
// センサとの接続を閉じる。
urg_close(&urg);
return 0;
}

・ 結果
1>------ ビルド開始: プロジェクト: URG_UGOKE, 構成: Debug Win32 ------
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _select@20 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _WSAGetLastError@0 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _connect@12 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _ioctlsocket@12 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _inet_addr@4 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _htons@4 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _socket@12 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _WSAStartup@8 が関数 _tcpclient_open で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _closesocket@4 が関数 _tcpclient_close で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _recv@16 が関数 _tcpclient_read で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _setsockopt@20 が関数 _tcpclient_read で参照されました。
1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _send@16 が関数 _tcpclient_write で参照されました。
1>C:\Users\yasuda\Desktop\URG_Program\URG_UGOKE\Debug\URG_UGOKE.exe : fatal error LNK1120: 外部参照 12 が未解決です。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: VC++ 2010 での測域センサのプログラム

#2

投稿記事 by h2so5 » 13年前

コード:

#pragma comment(lib, "Ws2_32.lib")
をmain関数の前あたりに入れてください

KOKO
記事: 3
登録日時: 13年前

Re: VC++ 2010 での測域センサのプログラム

#3

投稿記事 by KOKO » 13年前

h2so5さんの言うとおりに1行追加すると、解決しました!
本当に、ありがとうございます。

出来ればでいいのですが、
h2so5さんは、なぜこのようにすれば解決すると分かったのかを教えていただければありがたいです。
どこかで "Ws2_32.lib" を使っている部分があったのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: VC++ 2010 での測域センサのプログラム

#4

投稿記事 by h2so5 » 13年前

このエラーは必要なライブラリをリンクしておらず関数が見つからないときに発生します。
そこで、関数名から何のライブラリが必要かを調べます。

例えば

コード:

1>urg.lib(urg_tcpclient.obj) : error LNK2019: 未解決の外部シンボル _WSAStartup@8 が関数 _tcpclient_open で参照されました。
この中にある名前が特徴的な「WSAStartup」で検索をしてみます。
するとMicrosoftのサイトが出てきます。

http://msdn.microsoft.com/en-us/library ... 42213.aspx

下の方に行くとRequirementsという項目があり、
Library       Ws2_32.lib
と書かれているので、WSAStartupを使うにはWs2_32.libが必要なことが分かります。

KOKO
記事: 3
登録日時: 13年前

Re: VC++ 2010 での測域センサのプログラム

#5

投稿記事 by KOKO » 13年前

素早く、丁寧な返答ありがとうございます!!

今後はエラーの内容もしっかりと読み、意味を考えながらプログラミングしていこうと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る