毎度お世話になっています。
現在VC++2005でUSBカメラ画像の処理プログラムを作成しているのですが、
現在こちらのEWCLIBというライブラリを利用しています。
http://www.geocities.jp/in_subaru/ewclib/
このライブラリを
一つのソースファイルからから呼び出した場合問題無いのですが、
複数のソースファイルから呼び出した場合error LINK2005 既に~で定義されています…
といったエラーが出てしまいます。
複数のソースファイルからこのライブラリを利用したい場合どのようにすればいいでしょうか?
このライブラリは
#define EWC_BRIGHTNESS0 …
int ewc_init=0; …
int ewc_ncam; …
int EWC_GetImage(int num, void *buffer){ … }
と単一のヘッダファイルに変数や関数の定義を行っているのですが、
複数のソースファイルからこのライブラリを利用したい場合、やはりヘッダとソースに分割する必要があるのでしょうか?
参考になるページや解決方法等、お伺いしたいです。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ヘッダには inline 関数以外のものの定義を入れちゃだめです. プリプロセッサ系以外で入れていいのは宣言 (と inline な関数の定義) だけと思っていい.
蛇足ですが, インクルードガードで使うにしても
__SAMPLE_H
はまずいでしょう>#1. 処理系が内部的に使うシンボルとかぶったときに痛い.
No.3
- 回答日時:
#1です。
|定義がマズいのでしょうか?
まずいですね
基本、ヘッダーには
プロトタイプ宣言と外部変数の宣言しかいらないはずです。
問題の例で言えば
extern int ewc_init; …
extern int ewc_ncam; …
int EWC_GetImage(int num, void *buffer);
という感じでなければいけません。
で実体はヘッダーでなくソースに書くべきものです。
#2 の方と同意見です。
No.2
- 回答日時:
掲示されたライブラリでは…
複数のソースファイルからの参照は考慮されていないようですので、
>やはりヘッダとソースに分割する必要があるのでしょうか?
というコトになるかと思われます。
あるいは、このライブラリを使用するソースの方を1つにまとめる…とか。
ヘッダにベタ書きとか、こういうのはライブラリと思いたく無いですねぇ。
もう少し、使用する側のコトを考慮していただきたい。
# まぁ、WinMainとかをでっかいヘッダに隠蔽して、ライブラリという専門学校もありますし。
# さらにdefine定義で隠蔽されていたので…そこで学んだ学生は素のWinSDKプログラミングができるのかどうか……。
No.1
- 回答日時:
その共通ヘッダーに
#ifndef __SAMPLE_H
#define __SAMPLE_H
;; // 元の羅列
#endif
という感じでくくりましょう(__SAMPLE_H、というのはヘッダー固有の文字列でお願いします)
こうすれば一度取り込んだヘッダーを再読込みすることがなくなります。
標準ライブラリのヘッダーなどを覗くと分かると思いますが、
大抵ヘッダー固有のマクロ文字列を定義させているものです。
VC++特有の指定
#pragma once
なんていうのもあるけど、これは対応していないコンパイラもあるしね、、
※それにしてもヘッダーに
int ewc_init=0; …
int ewc_ncam; …
こんな定義があるのですか?
もしそうなのであればヘッダーとして失格です(笑
回答ありがとうございます。
すいません、記述していませんでしたが、
このヘッダーには#pragma onceのインクルードガードが付いています。
(#ifndefも試してみましたがやはりerror LINK2005が出ます)
定義がマズいのでしょうか?
どのように書き換えれば他の複数のソースから利用できるのでしょうか?
ご存知でしたら教えて下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google ColaboでGUI作成
-
python urlopen error について...
-
Windows Media Playerを開くと...
-
sleep関数
-
ライブラリ作成時のグローバル...
-
ドリームウィーバー8でこの効...
-
c言語でntpdateコマンドにあた...
-
フリーの数値計算ライブラリ
-
declaration of 'index' shadow...
-
【VBA】イベントログの取得
-
Visual Studioについて
-
シェイプに合わせてムービーク...
-
本格的なGUIを作るのにおすすめ...
-
Google Chartの株価チャートで...
-
C標準ライブラリがwinAPIを経由...
-
縦スクロールのゲームの参考本
-
C言語
-
C/C++のRSSパーサ(ライブラリ...
-
SONYのウォークマンNW-S636FKの...
-
VC++2005から postgreSQLを操作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google ColaboでGUI作成
-
Ps+のフリープレイでDestiny2の...
-
Windows Media Playerを開くと...
-
本格的なGUIを作るのにおすすめ...
-
iCloudフォトライブラリ内の画...
-
python urlopen error について...
-
scipy っていうのをいれようと...
-
LIBCMT.LIBをリンクしてコンパ...
-
ライブラリ作成時のグローバル...
-
【iTunes】CDをiPhoneに取り込...
-
静的ライブラリから静的ライブ...
-
boostのアンインストールについて
-
cでなぜguiアプリが作成出来る...
-
標準ライブラリだけでgetch関数...
-
Dreamweaverのライブラリが反映...
-
stricmp
-
iPhoneのカメラロールへ画像を...
-
ベッセル関数を使う
-
C言語について。
-
【C#C++】Win32API呼び出し
おすすめ情報