在编译我们的项目时,我们创build了几个档案(静态库),比如liby.a和libz.a ,每个档案都包含一个定义函数y_function()和z_function()的对象文件。 然后,这些档案被join一个共享对象,比如libyz.so ,这是我们主要的可分配目标之一。 g++ -fPIC -c -o yo y.cpp ar cr liby.a yo g++ -fPIC -c -o zo z.cpp ar cr libz.a zo g++ -shared -L. -ly -lz -o libyz.so 在示例程序中使用此共享对象时,如xc ,由于未定义的函数y_function()和z_function()引用,链接将失败。 g++ xo -L. -lyz -o xyz 但是,当我将最终的可执行文件直接链接到存档(静态库)时,它可以正常工作。 g++ xo -L. -ly -lz -o xyz 我的猜测是,包含在档案中的目标文件没有链接到共享库,因为它们没有被使用。 如何强制包容? 编辑: 包含可以使用–whole-archive ld选项强制。 但是,如果编译错误的结果: g++ -shared […]
我想了解linux如何处理进程调度和线程调度。 我读过linux可以调度进程和线程。 我的问题是:Linux有一个线程调度程序和一个进程调度程序? 如果是,他们如何合作?
我想从任何类Unix系统(如果可能的话)获得一个唯一的ID,每当我的应用程序运行在同一台机器上时,这个ID将是持久的。 如果可能的话,我想从Linux或FreeBSD或Solaris等得到相同的ID …我不想为每台机器生成一个新的ID,但得到一个已经存在的ID,我更喜欢这个ID来自操作系统,我不喜欢使用像MAC地址的东西。 如果没有其他选项可用,我可以将MAC与其他选项结合使用,例如,id可以是MAC地址和其他内容的组合的md5散列。 我想听听你的build议。 如果它是有用的,我的应用程序是用C / C ++编写的。 所有这些的目的是防止用户运行我的应用程序两次或更多次。 我只想跑一次。
我正在写一个使用librt的小型C程序。 我很惊讶,如果我把链接标志放在开始而不是结尾,程序将不能编译: 目前,我编译的程序是: gcc -o prog prog.c -lrt -std=gnu99 如果我要做下面的事情,它将无法在librt中find函数: gcc -std=gnu99 -lrt -o prog prog.c 然而,这与其他图书馆合作。 尝试使用简单的Makefile时发现了这个问题。 使实际编译prog.c不喜欢先(使用-c标志),然后做链接。 这是Makefile: CC = gcc CFLAGS = -std=gnu99 LIBS= -lrt LDFLAGS := -lrt prog: prog.o $(CC) -o prog prog.c -lrt -std=gnu99 inputmake时输出的结果是: gcc -std=gnu99 -c -o prog.o prog.c gcc -lrt prog.o -o prog prog.o: In function `main': […]