在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢?
分号 : 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行。
&& : 顺序执行各条命令, 只有当前一个执行成功时候, 才执行后面的。
|| : 顺序执行各条命令, 只有当前面一个执行失败的时候, 才执行后面的。
分号很好理解, 而&&和||与C/C++中的短路求值有异曲同工之妙。
在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢?
分号 : 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行。
&& : 顺序执行各条命令, 只有当前一个执行成功时候, 才执行后面的。
|| : 顺序执行各条命令, 只有当前面一个执行失败的时候, 才执行后面的。
分号很好理解, 而&&和||与C/C++中的短路求值有异曲同工之妙。
fasttext说明:
https://fasttext.cc/docs/en/support.html
要求:
(gcc-4.6.3 or newer) or (clang-3.3 or newer)
注:centos6默认的gcc是4.4;
python2.7:
pip install cython
pip install fasttext
douban源加速:pip install fasttext --trusted-host pypi.doubanio.com
报错:
实际上根据language="c++"看出需要的是fasttext.cpp,而且已经有这个文件;
因此关键点是如何让gcc编译fasttext.cpp;
从cython源码来看:
./python27/lib/python2.7/site-packages/Cython/Build/Dependencies.py
extension的sources包含了fasttext/fasttext.c,直接改成fasttext/fasttext.cpp即可;
def create_extension_list中:
patterns[0].sources[0] = 'fasttext/fasttext.cpp'
Installing collected packages: future, fasttext
Running setup.py install for future ... done
Running setup.py install for fasttext ... error
Complete output from command /data/python27/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-gkLUbb/fasttext/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('rn', 'n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-gqusvF/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/fasttext
copying fasttext/model.py -> build/lib.linux-x86_64-2.7/fasttext
copying fasttext/__init__.py -> build/lib.linux-x86_64-2.7/fasttext
running build_ext
building '*' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/fasttext
creating build/temp.linux-x86_64-2.7/fasttext/cpp
creating build/temp.linux-x86_64-2.7/fasttext/cpp/src
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/data/python27/include/python2.7 -c fasttext/fasttext.c -o build/temp.linux-x86_64-2.7/fasttext/fasttext.o -O3 -pthread -funroll-loops -std=c++0x
gcc: fasttext/fasttext.c: No such file or directory
gcc: no input files
error: command 'gcc' failed with exit status 1
备注:
下载fasttext包:
http://pypi.doubanio.com/packages/a4/86/ff826211bc9e28d4c371668b30b4b2c38a09127e5e73017b1c0cd52f9dfa/fasttext-0.8.3.tar.gz;
微盾开源防火墙,万能的github开源代码;
https://github.com/dekuan
没有root就意味着无法apt/yum安装依赖库,无法将编译好的库文件安装/链接到默认目录,那是不是就只能找ops了呢,答案是no;
编译时可以使用编译选项从指定目录找依赖;运行时可以从指定目录找库文件;
L: “链接”的时候,去找的目录,也就是所有的 -lFOO 选项里的库,都会先从 -L 指定的目录去找,然后是默认的地方。
-rpath_link (或者 -rpath-link):这个也是用于“链接”的时候的,例如你显示指定的需要 FOO.so,但是 FOO.so 本身是需要 BAR.so 的,后者你并没有指定,而是 FOO.so 引用到它,这个时候,会先从 -rpath-link 给的路径里找。
-rpath: “运行”的时候,去找的目录。运行的时候,要找 .so 文件,会从这个选项里指定的地方去找。对于交叉编译,只有配合 --sysroot 选项才能起作用。
也就是说,-rpath指定的路径会被记录在生成的可执行程序中,用于运行时。
-rpath-link 则只用于链接时。
LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下:
LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。
LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
区别与使用:
开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。
发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。
GCC里的链接器的选项是 -rpath 和 -rpath-link,看了下 man ld,大致是这个意思: