Articles of Linux操作系统

为共享库文件(* .so)生成头文件(* .h)

我有共享库文件( libmylib.so ),但没有头文件( mylib.h )。 你知道一些方法/工具从共享库文件生成这个头文件吗?

在Mac OS X上使用AWK分割文件

我想在特定的分隔符上使用AWK拆分文件。 awk代码如下所示: awk '/SEPARATOR/{n++}{print > "part" n ".txt" }' in.txt 这个代码在我的Linux系统上完美的工作。 但是,当在Mac OS X上运行完全相同的代码时,出现以下错误: awk: syntax error at source line 1 context is /SEPARATOR/{n++}{print > "part" >>> n <<< ".txt" } awk: illegal statement at source line 1 我认为这是在OS X附带的awk和Linux的mawk之间的某种区别。 在打印中删除string连接可以让awk程序在两个平台上工作,但我更愿意保留前缀和surfix。 如何编写一个awk程序,将分隔符上的文件分成多个编号的部分,并在两个平台上工作?

Linux上的C ++ makefile具有多个* .cpp文件

我正在尝试使用多个文件makefile。 有人能帮我吗? 我有的文件是file1.cpp,file2.h和main.cpp file1.cpp包含我的function。 file2.h包含我的函数的声明。 main.cpp [在代码中包含file2.h] file1.cpp [在代码中包含file2.h] 我做了 all: main gcc -g -Wall -o main main.cpp 但是当我尝试编译时,却给了我大量的错误。 我的代码在日食上工作得很好。

C ++链接器错误SDL图像 – 无法读取符号

我正在尝试使用SDL_Image库,并将.so添加到项目的链接库列表中(顺便说一句,我使用了Code :: Blocks)。 这样做后,当我去编译,我得到这个错误: Linking console executable: bin/Debug/ttfx /usr/lib32/libSDL_image-1.2.so: could not read symbols: File in wrong format 这是什么意思,我怎么得到它的工作? 编辑:我使用gcc。 谢谢!

OS X UDP发送错误:55没有可用的缓冲区空间

当我在OSX10.9.1上的python3.3中实现RUDP时,我注意到下面的代码实际上并没有做它在linux上的工作:(对于C,Java和C#/ Mono来说,哪种语言,同样的行为并不重要) from socket import * udp = socket(AF_INET, SOCK_DGRAM) udp.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) udp.bind(('0.0.0.0', 1337)) udp.setblocking(False) udp.setsockopt(SOL_IP, IP_TTL, 4) udp.connect(('8.8.8.8', 12345)) buf = b'x' * 400 for _ in range(1024 * 1024 * 10): udp.send(buf) 这个代码只是写了很多udp包到8.8.8.8,这些包在4跳之后被丢弃,所以他们不应该到达目的地,只是模拟出站stream量。 问题: 这段代码会抛出一个OSError(55,'No buffer space available')错误,而在Linux(Windows)上,它会抛出一个BlockingIOError,这很好,因为它是一个非阻塞套接字。 所以,在Linux和Windows上,套接字在OSX上的行为是正确的,这是一个OSError,这是不好的。 但真正有趣的是,即使我把这个套接字置于阻塞模式下,这个代码仍然会在OSX上抛出一个错误。 而在Linux和Windows上,这不会引发任何错误,正如所料,它只是阻止。 这是基于BSD系统的实现细节吗? 或者我错过了一些重要的networking设置? [编辑] 我忘了提到我正在千兆局域网中testing这种行为。 我认为这是问题。 我连接到一个100mbit的networking,问题就没有了,即使使用300mbit的wlan,问题也没有发生。 现在我想这是连接到高速networking时的一些OSX特定行为。 [编辑 – 最后]我终于find原因: http://lists.freebsd.org/pipermail/freebsd-hackers/2004-January/005369.html […]

为什么“script”命令会生成^ [和^ M个字符,以及如何使用vimsearch和replace它们?

在Linux上,使用bash shell,当我使用脚本命令时,生成的文件被称为打字稿。 当我用vim打开这个文件时,每一行都包含^ M字符,并且有几行(由于我的彩色命令提示符)包含一个字符^ [ 。 我想用什么都replace这些字符,有效地从生成的脚本中删除它们。 首先,我试过:%s/^[//gc , :%s/\^[//gc , :%s/\^\[//gc和其他一些变体。 没有一个匹配^ [字符,所以search/replace不起作用。 我也尝试了所有这些与^ M字符相同的结果。 一些谷歌search后,我发现^ M字符是真正的回车“\ r”。 所以然后我试过:%s/\\r//gc ,这对^ M字符有效! 我search了一些,试图找出^ [字符是什么,但没有发现任何帮助。 2个问题 : 1)什么是[字符,什么是适当的正则expression式在vim中使用来search和replace它? 2)为什么在linux上使用脚本命令时,生成的脚本在行尾产生^ M ? 这使得我认为linux脚本命令正在生成CRLF eol字符,而不仅仅是LF eol字符。

调用clock()时出现分段错误

我想了解使用下面的程序以编程方式caching的影响。 我正在与代码段错误。 我使用GDB(用-g -O0编译),发现它是分段错误 start = clock() (first occourance) 难道我做错了什么? 代码对我来说看起来很好。 有人能指出这个错误吗? #include <stdio.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #define MAX_SIZE (16*1024*1024) int main() { clock_t start, end; double cpu_time; int i = 0; int arr[MAX_SIZE]; /* CPU clock ticks count start */ start = clock(); /* Loop 1 */ for (i = 0; […]

使用input/输出redirect在后台运行进程

我很想知道,当进程有input/输出redirect来在后台运行进程时,在代码中使用“&”运算符是否有所不同 在后台运行进程方面,这两行代码之间有什么区别? 如果有的话,我怎样才能确定分歧将是什么? setsid python script.py < /dev/zero &> log.txt & setsid python script.py < /dev/zero & > log.txt & setsid python script.py < /dev/zero > log.txt & setsid python script.py & < /dev/zero > log.txt

如何从Ocaml使用自己的共享库.so调用C ++代码?

我需要build立一个调用共享对象(Linux下的.so)的Ocaml / C ++模块, 只要编译一个简单的Ocaml / C ++存根就是一个问题,我pipe理这个东西,但是当我需要将.so和ocamlmklib或者ocamlopt连接起来的时候,它会失败 我在gcc 4.5下工作(c ++ 0x) 共享对象的文件: hello.hpp #include <iostream> #include <string> using namespace std; class HelloApplication { public : HelloApplication(); ~HelloApplication(); void say(string s); }; typedef HelloApplication *(*create_hello)(); hello.cpp: #include "hello.hpp" HelloApplication::HelloApplication(){} HelloApplication::~HelloApplication(){} void HelloApplication::say(string s) { cout << "Hello : " << s << endl; } extern […]

Vim暂停,如果在.vimrc文件回声

我对vim有点问题。 我正在使用Debiantesting和–version给出 VIM – Vi IMproved 7.3 (2010 Aug 15, compiled Dec 1 2011 03:25:24) 在我的.vimrc文件中,如果我使用echo语句,它将使用以下语句暂停vim的运行: Press ENTER or type command to continue 然后vim将正常运行。 这是从简单的添加: echo "Hello" 到.vimrc的底部 如果可以,我怎样才能阻止这种暂停行为? 谢谢,纳尼