C++相談室 part144

■ このスレッドは過去ログ倉庫に格納されています
2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
2019/08/12(月) 10:43:33.86ID:QXujyVaw
>>431-433
んまーそれはそうやったorz
あと今回のgzip展開ルーチン呼び出し前にmallocした領域がたまたま後ろに居る可能性もあるな!
しかし>>428-428は断片化が生じないと言っているのではないし主目的のgzip読み込みに関しては
断片化による影響を受けにくくしているのだから大枠問題無い
良い良い、良いではないか
435395
垢版 |
2019/08/12(月) 11:18:22.87ID:lzJUIRtk
色々とご意見ありがとうございます。
どなたかの役にたてばと思い僕が調べた内容をお知らせします。

gzip展開後に5GBくらいになるデータでテストしてみました。

@time ./a.outで簡易的に時間取得
Arealloc方式の場合 >>415 の下記部分でコピーが何回発生しているかをカウントしてみる
// アドレスが変化した場合
if( data != data_new ){
// free(data); // 元オブジェクトは解放済みのため不要
data = data_new;
copy +=1; // コピーした回数をカウント
}else{
not_copy +=1; // コピーせずに拡張できた回数をカウント
}

結果は以下のようになりました。
強力なサーバでメモリが潤沢にあるためか、コピーがほとんど発生しないようで
realloc方式が早かったです。
本日祝日でサーバ使用者が少なく、よりコピー回数が減っていると思います。
個人PCでchromeにメモリ食われたりするとコピーが増えて逆転するかもしれないですね。
環境に合わせて変えようと思います。

# 2パス方式(約27秒)
./a.out 25.12s user 1.27s system 99% cpu 26.479 total

# realloc方式(約15秒)
./a.out 12.73s user 1.46s system 99% cpu 14.263 total
-> コピー 1
-> notコピー 636
2019/08/12(月) 11:33:43.60ID:ejXFqJv3
と言うことは、vectorだと遅くなるんかね
2019/08/12(月) 12:00:43.69ID:QXujyVaw
malloc()されたりrealloc()されたりするヒープメモリは仮想アドレス空間に対応した普通のOSならプロセス毎に別空間だから
他のプロセス(他のサーバ利用者が居る or chrome)があってもヒープメモリの断片化に関係しないはず…

さらに、2パス方式の時間が1パス方式の倍になるのはメモリコピーよりもgzip展開を2回もやることが利いているでケテーイ
438395
垢版 |
2019/08/12(月) 16:26:30.60ID:lzJUIRtk
すみません、また疑問が出てきたので相談させてください。
今読み込んだバイナリファイルの解析をしています。
ある一部の8バイトがビッグエンディアン形式で下記になっていて、これが少数点の数値で「2.500000e-04」となるようです。
3e 10 62 4d d2 f1 a9 fc

次に下記URLを参考に調べると今使っているサーバはリトルエンディアンでした。
(CPUはintel)
ttps://qiita.com/ryuichi1208/items/31442f9e8a7a7c94aeec
このため ビックエンディアン→リトルエンディアン の変換が必要と思うので下記のようにしました。

unsigned char t[8];
double little;
for (int i = 0; i < 8; i++) {
t[i] = data[7-i]; // バイトオーダーの変換
printf("%02x ", t[i]);
}
printf("\n");
memcpy(&little, t, 8);
printf(" %e\n", little);

---結果---
fc a9 f1 d2 4d 62 10 3e
9.536743e-10
----------

ちゃんと反転できていますが、結果は期待値「2.500000e-04」ではありませんでした。

>>続きます
439395
垢版 |
2019/08/12(月) 16:29:26.29ID:lzJUIRtk
次に実際の値を16進数表示したときの確認として下記を実行したところ、結果は以下のようになりました。
int main(){
double data = 2.500000e-04;
unsigned char *p;
int i;
p = (unsigned char *)&data;
for (i = 0; i < 8; i++) {
printf(" %02X", p[i]);
}
printf("\n");
printf("%e\n", data);
return 1;
}

---結果---
FC A9 F1 D2 4D 62 30 3F
2.500000e-04
----------

比較すると、最初の6バイトは同じですが最後の2バイトが違いました。
どうやったらバイナリデータに入っている 「3e 10 62 4d d2 f1 a9 fc」 を 「2.500000e-04」 に変換できるかわかりますでしょうか?
ビッグエンディアン→リトルエンディアン の変換時にもうひと工夫いるのでしょうか?
2019/08/12(月) 16:44:49.60ID:L6hDiPeu
2.500000e-04のIEEE754表現は3f30624dd2f1a9fcだぞ
元のバイナリの解釈間違ってんだろ
2019/08/12(月) 16:54:28.94ID:dO9cEAMi
>>426
開発っつーか本当にどうしようもないバグの場合は使う。
遅いって言っても5〜10倍くらいだろ。
2019/08/12(月) 16:55:20.98ID:L6hDiPeu
2.500000e-04/9.536743e-10≒262144=2^18だからどっかで誰かが18ビットシフトしてないか調べろ
あとはそのバイナリ作った野郎に聞け
2019/08/12(月) 17:38:07.40ID:ejXFqJv3
decimal64だったりして
サーバのCPUは何?
444395
垢版 |
2019/08/12(月) 18:15:44.42ID:lzJUIRtk
>>440,442
データの方が違うんですかね。。
今調べてますがまだわかりません。

>>443
xeonです。
decimal64というのはまだ調べていませんがまたちょっと違う変換になるんですかね?
2019/08/12(月) 18:17:10.91ID:ejXFqJv3
サーバじゃないか
もとデータ生成したビッグエンディアンのCPUは何かと
446395
垢版 |
2019/08/12(月) 18:32:01.51ID:lzJUIRtk
同じサーバで生成されました。
生成したソフトは販売されているものなので問題はないと思うし、
他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
なぜそう読めるのか不思議です。。
2019/08/12(月) 18:32:06.77ID:Mc0sgLDk
Big Endian だし IBM フォーマットとか?
2019/08/12(月) 18:34:28.15ID:Mc0sgLDk
>>446
> 生成したソフトは販売されているものなので問題はないと思うし、
なぜそのソフトの名前を書かないの?
> 他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
他のソフトって何よ?
みんなエスパーじゃないんだから出せる情報は出しなよ
449395
垢版 |
2019/08/12(月) 19:04:19.39ID:lzJUIRtk
>>448
すみません、calmaという大昔のもので今はもう販売されていません。
2019/08/12(月) 19:44:21.64ID:Mc0sgLDk
Calmaでググるとこれがヒットするけどこれかな?
https://en.m.wikipedia.org/wiki/Calma
これだとかなり古いソフトウェアだから浮動小数点のフォーマットが違うような気がする
451395
垢版 |
2019/08/12(月) 21:13:36.45ID:lzJUIRtk
>>450
数値をバイナリ変換していそうなコードを今見つけました。
ただのビッグエンディアン表記ではなさそうです。
もう少し調べて見ます。
452395
垢版 |
2019/08/12(月) 22:32:15.08ID:lzJUIRtk
下記で数値からバイナリへの変換ができましたが、何の計算をしているのかさっぱりわかりません……
逆変換できるのでしょうか?

http://codepad.org/oSvOJP1p

---結果---
変換前の値:0.000250
変換後の値:3e 10 62 4d d2 f1 a9 fc
----------
2019/08/12(月) 22:37:12.67ID:S6a2ieXo
>>452
>>447
2019/08/12(月) 22:47:45.27ID:ikUKzGwn
浮動小数の正規化っぽいけど
( A < 0.0625 ) || ( A >= 1.0 ) ってのが特殊だと思う
何かそういう事情があったんでしょう
浮動小数の正規化ってのは検索すればわかる
別環境でデコードするだけならたぶん気にしなくて大丈夫
2019/08/12(月) 22:50:05.37ID:ikUKzGwn
確かに、IBM方式ってやつっぽい
気にしないといかんわw
無駄なこと書いてごめんね
456395
垢版 |
2019/08/12(月) 23:17:08.77ID:lzJUIRtk
>>453-455
ありがとうございます。
今 IBMフォーマット や IBM方式 でググってますが中々それらしいものが出てきません。
かなりマイナーなものなのでしょうか?
2019/08/12(月) 23:30:07.71ID:S6a2ieXo
「エクセス64」とかでググればいいと思うよ
2019/08/12(月) 23:30:19.79ID:rRSk3cI0
https://en.m.wikipedia.org/wiki/IBM_hexadecimal_floating_point
2019/08/13(火) 10:45:33.34ID:dVadaxxz
こんな感じかな?保証はせん

uint64_t ibm = 0x3e10624dd2f1a9fcULL

if (ibm == 0x0) { return 0.0; }

uint64_t sign = ibm >> 63;
uint64_t ibmexp = (ibm >> 56) & 0x7f;
uint64_t ibmfrac = ibm & 0x00ff'ffff'ffff'ffffULL;

if (ibmexp == 0x0) { return std::numeric_limits<double>::quiet_NaN(); } //てきとう

uint64_t ieeeexp = (ibmexp - 64) * 4 + 1023;
uint64_t ieeefrac = ibmfrac;
while(ieeefrac & 0x0100'0000'0000'0000)
{
ieeefrac <<=1;
--ieeeexp;
}
ieeefrac ^= 0x0100'0000'0000'0000;
ieeefrac >>= 1;

uint64_t ieee = (sign << 63) | (ieeeexp << 55) | ieeefrac;
return *reinterpret_cast<double*>(&ieee);
2019/08/13(火) 14:26:32.23ID:69RK7xLA
whileの条件逆じゃね?
2019/08/13(火) 16:15:58.84ID:dVadaxxz
せやなうっかり
2019/08/13(火) 16:22:35.35ID:dVadaxxz
というか指数部のビット長勘違いしてたわ
459は捨ててください恥ずかしい
2019/08/13(火) 16:47:23.86ID:69RK7xLA
ieee形式は自前で変換せずにdoubleで計算してしまえばいいんでは?
2019/08/13(火) 16:53:18.70ID:dVadaxxz
frexpとldexpでやっちゃう方が間違えにくくていいのかな
2019/08/13(火) 18:22:46.77ID:PZEzWgAr
エクセス64か
半導体とかで使われるGDSIIの実数がそれなんだよね。
自力で実装したわー。
4bitを16進数一桁として考えてて、指数部は16^xで表現されててケチ表現なし。
2019/08/13(火) 20:43:52.09ID:qE6XkMY1
じゃあどっかにライブラリでもあるんじゃねえの
探したら出てくるパターンだろこれ
2019/08/13(火) 21:21:58.48ID:6RsDp/em
>>457-466
コメントやサンプルコードありがとうございます。
こんな複雑なコードになるんですね。。
何やってるのかさっぱりわかりませんが、上記コードを参考に勉強してみます。

しかしエクセス64で検索してもそんなに記事が出てこないですね。
かなりの難易度の予感……
2019/08/13(火) 21:38:17.35ID:qE6XkMY1
これか?

GitHub - enthought/ibm2ieee: Cross-project library for converting IBM-format hexadecimal floating-point to IEEE format binary floating-point.
https://github.com/enthought/ibm2ieee
2019/08/13(火) 21:49:54.85ID:0//4zuKx
よくやった
寝ることを許可する
2019/08/13(火) 22:00:36.02ID:yoyEPk6p
日本語だと情報が少なかったので英語圏も検索してみたところ、下記を見つけました。
ここのexcess64_to_ieee754が変換できるものかもしれません。
これから調べてみます。

ttps://github.com/ulfgri/gdsii-toolbox/blob/de8deaa5972c1449aacc3eea5dda86472ef721a8/Basic/gdsio/convert_float_generic.h
471395
垢版 |
2019/08/13(火) 22:02:53.32ID:yoyEPk6p
>>469

かぶりました。
探していただきありがとうございます。
それも調べてみたいと思います。
2019/08/13(火) 22:30:02.23ID:b87Bd4Qh
>>467
フォーマットは>>458のリンク先に書いてある
3e 10 62 4d d2 f1 a9 fc の最初の1バイト(3e)は符号ビットと指数
0x3e = (0 0111110) で最初の0は符号(正)
残りの0111110が指数で10進では62
指数は64の時に0と解釈するので62 - 64 = -2
IBM形式では16の指数なので16^(-2) = 1/256
一方仮数部は
1: 1/16
0: 0/256
6: 6/4096
2: 2/65536
:
計 0.064
なので結果は0.064*(1/256) = 0.00025 = 2.5e-4
473395
垢版 |
2019/08/13(火) 23:33:41.23ID:yoyEPk6p
>>472
わかりやすい解説ありがとうございます。
仮数部の計算がまだいまいち理解できていませんが、符号ビットと指数のところは理解できました。
なんとかプログラム作れそうです。
とても勉強になりました。ありがとうございました。
474395
垢版 |
2019/08/14(水) 19:36:19.26ID:4qk3klko
>>472
仮数部の計算も理解できました。
ネットで浮動小数点を解説している記事を見るとどこも2進数で書かれていましたが、 >>472 はこのスレで会話に出しているバイト単位(16進数)で計算してもらってるんですね。
この辺の話になるとこのスレの趣旨から外れてきているのでこの辺にしておきます。

以上、お礼を兼ねての書き込みでした。ありがとうございました。
2019/08/14(水) 19:42:18.80ID:vrcyV9Lc
bit単位でもいいんだけど元の値との対応が取りにくいから16進の1文字(4bitなのでByteじゃなくてNibbleって言う)単位で計算してる
2019/08/14(水) 20:46:53.70ID:4qk3klko
そうでした。4bitでした。
今回バイナリ読みで初めてどっぷり16進数を扱ってますがバイトとニブル?がすぐわからなくなります。。
2019/08/15(木) 21:08:05.11ID:ICD/Kw2h
バイナリ読み込むだけで大騒ぎだな
2019/08/15(木) 23:25:44.65ID:ON8CHoCN
ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02007.html

上記URLで
・クラスの宣言はヘッダファイルにする
・クラスの実装部はソースファイルにする
・そのクラスを使いたいときはヘッダファイルのみインクルード
とありますが、これが一般的なのでしょうか?
2019/08/15(木) 23:28:11.45ID:qONhwHDt
テンプレート使ってないならそう
2019/08/15(木) 23:28:23.18ID:NU+OkurF
お前はどうしたいんだ?
2019/08/15(木) 23:34:39.15ID:ON8CHoCN
なるべく基本にのっとった書き方に慣れることで、他の人が書いているプログラムもある程度読めるようになれたら調べるときに助かりそうだと思っています。
2019/08/16(金) 00:06:45.60ID:rFeA+cBh
だからさ、そういう疑問を持つってことは
お前なりに考えた別のやり方があるんだろ?
それを書けよ
2019/08/16(金) 06:03:18.56ID:WXGx/ZZ4
イライラしすぎw
2019/08/16(金) 08:54:32.89ID:obgy5Xre
余裕が無いよね
2019/08/16(金) 09:25:28.24ID:utjtXV/O
余裕ねえんだよ!
2019/08/16(金) 12:04:34.47ID:agPg59wH
どういう意味や効果があってそうしてるかじゃなくて「一般的」かどうかばかり気にしてるあたりがプログラマ向きの性格じゃなさそう
2019/08/17(土) 01:32:10.26ID:hKQWaxIk
iOSのC++の勉強アプリ何個か試してみたんだけど、未だにC++03時代の事までしか教えてないのね。

でも付属の簡易コンパイラはC++17の機能が使えたりする...
2019/08/17(土) 09:28:18.98ID:pwn7XyQd
初心者のうちから shared_ptrやunique_ptr を積極的に使うようにしてほしい。
2019/08/17(土) 11:16:45.62ID:AIpU/gsR
いくら便利なものがあるといってもさすがにC++をナマポや自前RAIIの知識なしで使うのは不可能だから、
初心者は最初はメモリ破壊で苦しんだ方がいいと思うわ
2019/08/17(土) 18:58:14.86ID:RHoMoFJP
https://ideone.com/10xlAn
ギャグなんですけど、
これファイル間またいで定義したい時って何か特別な事しないといけなかったでしたっけ?
「日本語C++」書いてみたい人生だった。
2019/08/17(土) 19:17:51.68ID:enMhOq0z
>>490
Clangだと通った
https://ideone.com/UhrTDx

GCCは対応していないっぽい
2019/08/17(土) 19:24:45.74ID:RHoMoFJP
>>491
検証ありがとう。自分はVCなんだけどね。書き忘れてごめん。
VCも無理かな。

最近プリプロセッサは、すたれる流れのようなのでメンテされてないのかなぁ・・・。
493デフォルトの名無しさん
垢版 |
2019/08/17(土) 20:52:47.23ID:pwn7XyQd
マクロは名前空間に閉じ込めることができないからしょうがない
2019/08/17(土) 21:44:27.19ID:TZKhKhX1
VCはソースを全てBOM付きのutf8にすれば通るんじゃないかな。
2019/08/18(日) 00:23:19.08ID:rdsOEwya
「一般的」な書き方とは何か
考えざるを得ない流れ
2019/08/18(日) 01:17:05.19ID:+Tl4M3zk
VC使うならForceAllUTF8入れとけ
2019/08/18(日) 09:44:27.51ID:S9bN8HAf
#define 違うなら else

これは もしくは の方がいいんじゃねえか?
2019/08/18(日) 09:51:15.20ID:aqKQgKLg
もし i == 0 なら
printf(">>497 はちょっと頭悪い");
もしくは
printf(">>497 はちょっと頭弱い");

…なるほど正しいかも

ってそんなわけ無いだろw
2019/08/18(日) 10:01:09.98ID:X/aF/qdA
>>80
>Pythonは「CPythonの実装が規格だ」だし

それrubyと勘違いしてないか?
明文化されていない仕様なんてそんなに残っていないと思うが。

あと、MATLABはアカデミック分野では少なくともRやOctaveなんかより
信用されていると思うよ。
2019/08/18(日) 10:03:59.09ID:X/aF/qdA
間違えて一か月も前のレス付けてしまった///
2019/08/18(日) 10:49:51.48ID:kvaoi5YP
make環境を作ると更新ファイルだけコンパイルしてくれたり、色々便利そうなので
コンパイルコマンド直たたきからmake環境に移行しようと考えています。

下記で正常動作しているので、これでmake環境を作りたいと考えていますが
「c++ make」で検索してもあまり情報がないため苦戦しています。
どのように書けば良いかわかりますか?もしくは参考のURLなどあれば教えていただけないでしょうか。

#!/bin/sh -
export CC=~local/bin/gcc
export CXX=~local/bin/g++

g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o &&
g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o &&
g++ Main.o Func.o -o main.exe -lz
2019/08/18(日) 10:59:16.60ID:ToM84NKx
正常動作してんだったらそれでいいじゃん
2019/08/18(日) 11:14:15.09ID:OLPPr8ZD
前半のexportが謎
2019/08/18(日) 11:22:19.79ID:aqKQgKLg
>>501
簡単に言えばMakefileに

作ってほしいファイル名: そのファイルを作るのに必要なファイル
(タブ(なぜか空白はダメ))作るためのコマンド

をズラズラ書いておけばいい
なのでその例だと

Func.o: Func.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o

Main.o: Main.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o

Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz

って書いておいて(わかると思うがg++の前はタブな)
make Main.exe
ってやればいい
毎回Main.exeを指定するのが面倒なら
Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz
の行を一番上に持って行けば make だけで作成できる
(makeは指定がないと最初に見つけた作りたいファイルを作ろうとする)
505デフォルトの名無しさん
垢版 |
2019/08/18(日) 11:59:20.99ID:XCKtcmfj
>>501
以下の文献とオライリーのGNUmake読んで、あとは自分で考えるのが良い。
http://aegis.sourceforge.net/auug97.pdf
この辺り、まともに理解してる奴が本当に少ないから。
だからconstexprとかboostとかクソみたいなものをありがたがるんだろうなと思う。
2019/08/18(日) 12:02:21.51ID:YNXq+wty
ビルドツール選びの時にC++の言語機能をたたく理由がわからない。
2019/08/18(日) 12:06:43.92ID:XCKtcmfj
>>506
ビルドと言語機能は綿密に絡み合ってるから。
c++使っててこれだけ当たり前の話を理解できないというのが理解できない。
2019/08/18(日) 12:20:14.52ID:aqKQgKLg
> ビルドと言語機能は綿密に絡み合ってるから。
具体例の1つも出せないクズ乙
2019/08/18(日) 12:24:12.06ID:XCKtcmfj
>>508
505の内容見て具体例に思えないようならもう話すことはないな。
2019/08/18(日) 12:25:58.38ID:+Tl4M3zk
> タブ(なぜか空白はダメ)

こういうところがクソ
2019/08/18(日) 12:32:36.07ID:rdsOEwya
「else」は「さもなくば」
2019/08/18(日) 12:35:03.02ID:rdsOEwya
Makeは古い
AntかMavenかGradle使え、
いや知らんけど
2019/08/18(日) 12:39:00.99ID:4oEGaRbg
>>509
ああ、そのまま黙っていてくれ。
2019/08/18(日) 12:43:59.27ID:aqKQgKLg
>>509
はい、逃げたーw
2019/08/18(日) 12:54:48.15ID:rdsOEwya
素のMakefileは最終的なオブジェクトファイルとヘッダファイルの依存関係を書き下すのが大変に面倒臭い
なぜなら、
 Target: Dependencies1 Dependencies2 ...
 (TAB)Command
という記述において、Commandが具体的にTargetお生成しないと事実上立ち行かないので、
インクルードファイルAがインクルードファイルB、Cをインクルードしているという状況を
 A: B C
 (TAB)echo Hello World!
などと書くわけには逝かず、あくまで
 foo.obj : foo.cc A B C
 (TAB)gcc foo.cc
式に.objなターゲットに対して関連付けねばならない
ファイルがあるだけで勝手にヘッダファイルの依存関係を解決させることは
GNU Makeの昨日とシェルコマンドを組み合わせてできた気がするが(忘れた
たかがこれだけのためになんでそんな糞面倒なことをせねばならんのじゃ、というキモス

※ 個人の感想です
2019/08/18(日) 13:00:42.47ID:26pp6bRY
Ruby のRake, Thor などのタスクランナーで、コンパイル出来ないのか?

Webpack, Gulp とか
2019/08/18(日) 13:02:29.42ID:XgJSnVlI
C++のモジュールシステムはいけてないよね
という話ならわかるが、
constexprとboost?
全く意味がわからねぇ
2019/08/18(日) 13:07:44.93ID:rJ9LPM9I
>>515
そこは gcc -M 類の出番。まぁ面倒なのは変わらないんだろうけど。
2019/08/18(日) 13:34:10.37ID:jp7+H4+a
一応昔はコンパイル単位がすなわちモジュールとして機能していたはずだったのに、どこで間違えたんだろうな
2019/08/18(日) 14:46:24.52ID:aqKQgKLg
>>501
簡単に言えばMakefileに

作ってほしいファイル名: そのファイルを作るのに必要なファイル
(タブ(なぜか空白はダメ))作るためのコマンド

をズラズラ書いておけばいい
なのでその例だと

Func.o: Func.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o

Main.o: Main.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o

Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz

って書いておいて make Makefile Main.exe
521520
垢版 |
2019/08/18(日) 14:48:27.09ID:aqKQgKLg
スマン、間違えて二重投稿になっちまった
522501
垢版 |
2019/08/18(日) 14:57:48.84ID:kvaoi5YP
>>503
CC, CXXは個別インストールしているgccがあり、以前何かのモジュールをインストールしたときに、元からある
/usr/bin/g++
に関連したライブラリパスが使われることがありこれを設定しました。
今回の単純コンパイルには不要かもしれませんが、おまじないで残していました。

>>504
ありがとうございます。
基本はコマンドを並べていけばいいんですね。
何も指定しない時には先頭のものを指定したことと同じになることも参考になりました。

>>505
このあたりもちゃんと理解できるようになりたいです。
少しづつ勉強したいと思います。

>>512
こんなのもあるんですね。
これも調べてみたいと思います。
523501
垢版 |
2019/08/18(日) 15:01:32.97ID:kvaoi5YP
>>521
いえいえありがとうございます。
まずは単純羅列から入ってCXXFLAGS、OBJS、LIBSなどを使いこなしていこうと思います。
2019/08/18(日) 16:31:44.67ID:16gP3sh0
>>512
それらが make に比して優れた点はなんでしょうか?
2019/08/18(日) 17:11:35.03ID:ToM84NKx
>>517
横からすまんが意味はわかる
c++はコンパイル時になんでもかんでも解決しようと必死すぎ
フェーズ分けてbinutils使いこなした方が素直と思うことが多々ある
2019/08/18(日) 18:18:09.60ID:1zrPBBLI
>>525
binutilsを使う例として、具体的にはどういうことがありますか?
2019/08/18(日) 18:19:29.10ID:XCKtcmfj
なんなんだろうなこの「俺に手取り足取り教えろ」みたいな要求は。
2019/08/18(日) 18:30:04.45ID:J+MNWXO/
お前には聞いてないから気にしなくていいぞ
529520
垢版 |
2019/08/18(日) 19:26:20.54ID:wYOmB27V
>>525
ますます意味わからんw
2019/08/18(日) 19:34:00.82ID:OLPPr8ZD
変なの居るなw
2019/08/18(日) 19:35:39.45ID:ToM84NKx
スキル不足なのに見下してるやつに教えてやる義理はないんだよね
逃げますね
2019/08/18(日) 19:40:22.27ID:l1trUFc3
私はneson/ninjaがおぬぬめ🌱
2019/08/18(日) 22:23:44.93ID:JoepZ2Id
>>525
国際標準になってないbinutilsなんて使ったら、環境依存でコンパイル通らなくなったりする。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況