No.1
- 回答日時:
標準C++の範囲で書かれたプログラムであれば、ほぼコンパイルしなおすだけです。
(Makefileを書き直す等は必要ですが...)標準外の記述が含まれていれば、ほぼその部分すべての書き換えが必要になります。ただし、Boost C++ LibrariesやQtなど、クロスプラットフォームのライブラリを用いていた場合は、状況がかなりましになります。
回答ありがとうございます。
おそらく標準C++の範囲で書かれたものだと思うですが・・・
そもそもMakefileの書き方も分かっていないくらいのレベルですので。
その辺りは自分でググって勉強しようと思います。ありがとうございます。
No.2
- 回答日時:
> おそらく標準C++の範囲で書かれたものだと思うですが・・・
もしそのプログラムがGUIを使っていて、しかも簡単にビルドができるようであれば、かなり絶望的な状況が待っていると思います。
コマンドプロンプト上で動作するものであれば、まだ見込みがあります。
一度ソースファイルを覗いてみて、
#include "StdAfx.h" とか LPCTSTR とか TCHAR とかの記述がないか探してみてください。もし見つかるようだと、移植は確実に難航します。
GUIは使っていません。コマンドプロンプト上で動作するものです。
#include "StdAfx.h"やLPCTSTRやTCHARといった記述はありませんでした。
OpenGLは使っているようですがこれは問題ないでしょうか?
#include <windows.h>とあるのですが移植するときこの辺りはどう変えればいいのでしょうか?
No.3
- 回答日時:
> OpenGLは使っているようですがこれは問題ないでしょうか?
OpenGLを使ってGUIなしなのでしょうか?
> #include <windows.h>とあるのですが移植するときこの辺りはどう変えればいいのでしょうか?
どんな使い方をしているかによります。
先に書いた LPCTSTRやTCHAR は、比較的よく使われる環境依存の型名ですが、Windows APIに依存したコードがある場合には移植が難航するという点では同じです。
どういったらいいんでしょうか。
OpenGLはグラフを表示するためだけに使われています。
バリバリのGUIといった感じではありません。
もう一度プログラムを見てみましたがLPCTSTRやTCHARといった記述はありませんでした。
この場合Makefileを書き直せばうまくいきそうですか?
No.4
- 回答日時:
> OpenGLはグラフを表示するためだけに使われています。
そのグラフはどうやって表示しているのでしょうか?
例えば * を並べて棒グラフを作るように、文字情報をコンソールに出力しているだけでしょうか? それならまあ問題ないでしょう。
> もう一度プログラムを見てみましたがLPCTSTRやTCHARといった記述はありませんでした。
Windows APIや関連する型・マクロなどはなかったでしょうか?
大文字で始まる関数や、FILE型以外の大文字で始まる型名があると、面倒なことになります。
手っ取り早く判断するには、#include <windows.h> の箇所をコメントアウトして、ビルドできるかどうか調べることです。
> この場合Makefileを書き直せばうまくいきそうですか?
上記しだいです。
返事が遅くなりすみません.
文字情報を出力しているのではなく,点をプロットしている感じです(おそらく).
#include<windows.h>をコメントアウトしてのビルドはできました.
が,警告がいくつかでました.
No.5ベストアンサー
- 回答日時:
私も手っ取り早くコンパイルしてみることをお勧めします。
詳しくない人が下調べしまくっても移植を始めてから問題が出てくるだけだろうと思いますので、コンパイルしてみて出てくるエラーをここで聞いたほうが早いと思います。
今Linuxの環境があるのであれば、#include <windows.h> をコメントアウトして、makefileなんて書かなくてよいですから、gcc -c file.cで試しにコンパイルしてみましょう。
回答ありがとうございます.
返事が遅くなりましてすみません.
Linuxの環境で#include <windows.h>をコメントアウトしてコンパイルしてみたところエラーがたくさん出てきました.
Windowsでは#include <windows.h>をコメントアウトしてもビルド,実行はできました.
No.6
- 回答日時:
OpenGLは使ったことがありませんが、プラットフォーム共通のライブラリ
のようですので、OpenGLベースのアプリケーションなら特別なことを
せずとも移植可能のようです。同一ソース化もできるようです。
参考URL:http://www.geocities.co.jp/SiliconValley/7406/ti …
回答ありがとうございます.
また,返事が遅くなりすみません.
OpenGLは結果を表示するのに使用しているのでOpenGLベースかどうかはわかりません.
OpenGLだとWindows,Linux関係なく使えるようですね.
No.7
- 回答日時:
> Linuxの環境で#include <windows.h>をコメントアウトしてコンパイルしてみたところエラーがたくさん出てきました.
どんなエラーが出たのか、メッセージをそのまま補足してください。
余りにも多い場合は、最初のいくつかだけでもかまいません。
> OpenGLだとWindows,Linux関係なく使えるようですね.
そんなに甘くはありません。
十分配慮すれば、共通のソースを記述できるというだけで、OpenGLを使えば無条件に移植性が得られるわけではありません。
この回答への補足
少し家を離れていたもので返事が遅くなり申し訳ないです。
エラーが非常に多かったので最初の数行だけ抜き出しました。
main.cc:7:18: conio.h: そのようなファイルやディレクトリはありません
main.cc:8: error: 'BYTE' is used as a type, but is not defined as a type.
main.cc:11 から include されたファイル中:
Serial.h:1:9: 警告: #pragma once はもう使われていません
Serial.h:3:21: windows.h: そのようなファイルやディレクトリはありません
In file included from main.cc:11:
Serial.h:13: error: `BYTE' was not declared in this scope
Serial.hというのはこちらで作ったヘッダーファイルのようです。
お時間があればよろしくお願いします。
No.8
- 回答日時:
#5のzwiです。
>main.cc:7:18: conio.h: そのようなファイルやディレクトリはありません
Linuxにconio.hは無いですね。getch()関数を使っていた場合は、私は使ったことが無いのですがcursesライブラリに代替できるものがあるようです。申し訳ないのですが詳しく無いのでこれ以上は説明できません。
>main.cc:8: error: 'BYTE' is used as a type, but is not defined as a type.
Linuxには定義してあるヘッダがありませんので、typedef unsigned char BYTE;をヘッダ定義してください。
>main.cc:11 から include されたファイル中:
>Serial.h:1:9: 警告: #pragma onceはもう使われていません
gccのバージョンによっては使えるみたいです。
代替として,
#ifndef __SERIAL_H__
#define __SERIAL_H__
<元のヘッダの中身>
#endif
に置き換えるという手段があります。
>Serial.h:3:21: windows.h: そのようなファイルやディレクトリはありませんIn file included from main.cc:11:
これは無いので削除してください。
>Serial.h:13: error: `BYTE' was not declared in this scope
BYTEは上で書いたのと同様です。
エラーの種類がこれだけだとは思えません。
まだ他のタイプがあるんじゃないでしょうか?
この回答への補足
回答ありがとうございます。
指摘されたところを修正してみました。
前回出たエラーは無くなったようです。前回のものは最初の数行でしたので残りの部分も載せてみます。すこし多いのですがお願いします。
Serial.h:19: error: 文法エラー before `*' token
Serial.h:20: error: 文法エラー before `)' token
Serial.h:24: error: 'HANDLE' is used as a type, but is not defined as a type.
Serial.h:25: error: 'DCB' is used as a type, but is not defined as a type.
Serial.h:26: error: 'BOOL' is used as a type, but is not defined as a type.
Serial.h:28: error: 'COMMTIMEOUTS' is used as a type, but is not defined as a type.
main.cc:18:18: glut.h: そのようなファイルやディレクトリはありません
main.cc:22: error: 文法エラー before `[' token
main.cc:23: error: 文法エラー before `[' token
main.cc:30: error: `WORD' was not declared in this scope
main.cc:30: error: 文法エラー before `[' token
main.cc: function 内の `void idle()':
main.cc:35: error: `glutPostRedisplay' undeclared (first use this function)
main.cc:35: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cc: function 内の `void display()':
main.cc:40: error: `g_distance' undeclared (first use this function)
main.cc:48: error: `GL_COLOR_BUFFER_BIT' undeclared (first use this function)
main.cc:48: error: `glClear' undeclared (first use this function)
main.cc:49: error: `glColor3d' undeclared (first use this function)
main.cc:50: error: `GL_MODELVIEW' undeclared (first use this function)
main.cc:50: error: `glMatrixMode' undeclared (first use this function)
main.cc:51: error: `glLoadIdentity' undeclared (first use this function)
main.cc:67: error: `GL_LINES' undeclared (first use this function)
main.cc:67: error: `glBegin' undeclared (first use this function)
main.cc:68: error: `glVertex2d' undeclared (first use this function)
main.cc:70: error: `glEnd' undeclared (first use this function)
main.cc:92: error: `GL_LINE_STRIP' undeclared (first use this function)
main.cc:125: error: `glutSwapBuffers' undeclared (first use this function)
main.cc: function 内の `void init()':
No.9
- 回答日時:
一筋縄では解決しなさそうです。
やっかいな問題がいくつか出てきています。>Serial.h:19: error: 文法エラー before `*' token
>Serial.h:20: error: 文法エラー before `)' token
これだけだと分からないですね。19,20行目の内容が見たいです。
>Serial.h:24: error: 'HANDLE' is used as a type, but is not defined as a type.
WindowsAPIのハンドルの用ですが、何に使っているものか分からないと代替案は出せませんね。ヘッダよりも使っているソースコード側が問題となります。
>Serial.h:25: error: 'DCB' is used as a type, but is not defined as a type.
DCB構造体ですか?シリアルポートの制御を行う場合に必要な構造体ですが。シリアルポートを使われてますか?上のハンドルとも関係しそうですね。
>Serial.h:26: error: 'BOOL' is used as a type, but is not defined as a type.
これは自前で定義します。
typedef int BOOL;
で大丈夫だと思います。
>Serial.h:28: error: 'COMMTIMEOUTS' is used as a type, but is not defined as a type.
これもシリアルポート関係です。
>main.cc:18:18: glut.h: そのようなファイルやディレクトリはありません
これはOpenGLのヘッダですね。OpenGLには詳しくないのですが、インストールされていないか、パスの見えるところにヘッダが存在しないものと
思われます。
include <GL/glut.h>
で通る場合もあるようです。
>main.cc:22: error: 文法エラー before `[' token
>main.cc:23: error: 文法エラー before `[' token
これだけだと分からないですね。22,23行目の内容が見たいです。
>main.cc:30: error: `WORD' was not declared in this scope
>main.cc:30: error: 文法エラー before `[' token
これもLinuxでは無いので、
typedef uisigned int WORD;
と定義します。
>main.cc: function 内の `void idle()':
>main.cc:35: error: `glutPostRedisplay' undeclared (first use this function)
>main.cc:35: error: (Each undeclared identifier is reported only once for each function it appears in.)
>main.cc: function 内の `void display()':
>main.cc:40: error: `g_distance' undeclared (first use this function)
>main.cc:48: error: `GL_COLOR_BUFFER_BIT' undeclared (first use this function)
>main.cc:48: error: `glClear' undeclared (first use this function)
>main.cc:49: error: `glColor3d' undeclared (first use this function)
>main.cc:50: error: `GL_MODELVIEW' undeclared (first use this function)
>main.cc:50: error: `glMatrixMode' undeclared (first use this function)
>main.cc:51: error: `glLoadIdentity' undeclared (first use this function)
>main.cc:67: error: `GL_LINES' undeclared (first use this function)
>main.cc:67: error: `glBegin' undeclared (first use this function)
>main.cc:68: error: `glVertex2d' undeclared (first use this function)
>main.cc:70: error: `glEnd' undeclared (first use this function)
>main.cc:92: error: `GL_LINE_STRIP' undeclared (first use this function)
>main.cc:125: error: `glutSwapBuffers' undeclared (first use this function)
glut.hをインクルードできれば解決すると思います。
この回答への補足
ありがとうございます。
ご指摘の通り修正しましたところ、だいぶエラーが減りました。
OpenGL関係のエラーがたくさんありました。
それでもまだまだエラーがありますのでよろしくお願い致します。
Serial.h:22: error: 文法エラー before `*' token
Serial.h:23: error: 文法エラー before `)' token
の部分ですがソースでは
DWORD Read2(void* data, int size);
DWORD CheckSerialData(void);
のようになっていました。
>DCB構造体ですか?シリアルポートの制御を行う場合に必要な構造体ですが。シリアルポートを使われてますか?上のハンドルとも関係しそうですね。
シリアルポートを使っています。おそらくDCB構造体だと思われます。
hComはどうやらポートのハンドル(?)を示しているようです。
以下のように使われています。
GetCommState(hCom, &dcb);
↑ ↑
HANDLE DCB
GetCommTimeouts(hCom,&ctmo);
↑
COMMTIMEOUTS
main.cc:23: error: 文法エラー before `[' token
main.cc:24: error: 文法エラー before `[' token
の部分は
WORD g_distance[1][682];
WORD save_distance[SAVE_SIZE][682];
のようになっていました。
No.10
- 回答日時:
あっ間違ってました。
つづりと型を。typedef unsigned short WORD;
に訂正します。それと
typedef unsigned int DWORD;
を追加してください。
これで今まで出てきた中のシリアルポート以外は解決すると思います。
使っているシリアルポート関係の関数を教えてもらえますか?
参考↓シリアルポート制御に使う関数。
http://d.hatena.ne.jp/paruto/20060228
使われている関数と使われているパラメータをすべて教えてください。
代替のLinux関数を書きますので。
この回答への補足
ありがとうございます。
シリアルポート関係で使われている関数は以下の通りです。
hCom = CreateFile(comport, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
GetCommState(hCom, &dcb) ;
SetCommState(hCom, &dcb);
GetCommTimeouts(hCom,&ctmo);
SetCommTimeouts(hCom,&ctmo)
PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
CloseHandle(hCom)
WriteFile(hCom, &data, sizeof(BYTE), &byte, NULL)
WriteFile(hCom, data, size, &byte, NULL)
ReadFile(hCom, &data, 1, &byte, NULL);
ReadFile(hCom, data, size, &byte, NULL);
ClearCommError(hCom, &dwErrors, &ComStat);
urgeComm(hCom, PURGE_RXABORT | PURGE_RXCLEAR);
これで良かったのでしょうか?
どうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Windows 10 Visual StudioとVisual C++ Build Toolsについて 1 2023/04/16 03:42
- C言語・C++・C# 「using Windows」でエラーが出る 3 2022/12/23 19:53
- その他(プログラミング・Web制作) Visual StudioでDjangoのプロジェクト配下のappを作成する方法 1 2022/05/01 03:47
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- その他(プログラミング・Web制作) Scratchについてです 作ったプログラムをコンピュータに保存してそのまま何もいじらずにそのプログ 1 2022/05/19 18:51
- ソフトウェア VisualStudio のデータブレークポイントを有効にする方法 1 2023/05/01 09:42
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# visual studio 2019 についての質問です 1 2022/09/21 09:58
- UNIX・Linux Linuxサーバーのパーティション・ディレクトリの推奨見積もりについて 3 2023/01/17 00:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
sys/time.hのインクルードがで...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
VB2008で定数に色の設定をした...
-
fortranでプログラムを実行する...
-
Handlesについて
-
RightとLeft関数のライブ...
-
VBScriptのエラーの見つけ方及...
-
vbsで作ったプログラムを続けて...
-
LPCWSTRとchar
-
ユーザフォーム開くとエラーになる
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
error C3867 関数呼び出しには...
-
フォームの作成中にエラーが発...
-
VBAでファイルを開くプログラム...
-
EXEファイルを作りたいが、途中...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
WindowsからLinuxへの移植
-
multiple definitionというエラー
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報