Linux环境下的一些编译问题

在Linux环境下编译曾经遇到过一些问题,在这里做一点小小的总结



C与C++

基础编译指令

1
cc -o demo demo.c

运行指令

1
2
./demo
./demo< txt

1.编译.c文件时,如果使用了math.h里的函数,则需要在编译命令结尾加-lm

1
cc -o demo demo.c -lm

2.编译.c文件时,如果使用bool类型变量,则要使用g++编译器

1
g++ -o demo demo.c

3.编译.c++文件时,使用g++编译器,gcc没有用

1
g++ -o demo demo.c




Lex

1
2
3
lex –o demo.c demo.l
gcc –ll demo.c –o demo
./demo

如果编译时报错:

1
2
lex.yy.c: undefined reference to `yywrap'
```

那么在.l文件结尾添加

1
2
3
int yywrap() {
return(1);
}

即可



Yacc

1
2
yacc –d t.y
gcc t.tab.c -ly -ll

编译时可能会遇到如未定义指令或者找不到某类文件,这时只要去下载或者移动一些usr里的文件。这里情况比较多,大家可以去根据自己遇到的情况去网上找答案,网上的教程很多。




语言库训练

训练样本大家可随意选择,这里我载给大家推荐一个网站,可以在这里下载训练的样本
https://www.wsatmt.org/europarl/
srilm可以到网上去搜索


(需要对..\srilm-1.7.1\visual_studio中的文件先进行编译,对于不同的计算机可能不出现不同的编译错误,导致..\srilm-1.7.1\bin\Debug中文件缺失,有些确实是不影响的,有些则会导致之后的编译报错)

操作步骤:

1.进入srilm文件夹..\sriml
2.再进入..\srilm-1.7.1\bin\Debug
3.依次输入命令
-词频统计

1
ngram-count -text europarl-v7.es-en.en -order 3 -write file.count

-模型训练

1
ngram-count -read file.count -order 3 -lm file.lm -interpolate -kndiscount

-测试(困惑度计算)

1
ngram -ppl testfile.txt -order 3 -lm file.lm -debug 2 > file.ppl