我编写了一个使用共享对象的简单程序,并使用打开了该对象dlopen()。我还编译并链接了共享对象,如下所示:
gcc -o libmylib.so libmylib.c -shared -fPIC -Wall
gcc -o program program.c -L. -lmylib -ldl -Wall
Run Code Online (Sandbox Code Playgroud)
当我第一次尝试运行该程序时,它表示类似
cannot open libmylib.so: no such file or directory
Run Code Online (Sandbox Code Playgroud)
因此我搜索了Internet,发现我必须将共享对象复制到/lib/i386-linux-gnu/,才能运行程序。因此,我这样做了,并且奏效了,但是后来我尝试以其他方式做到这一点,因此libmylib.so从/lib/i3686-linux-gnu/目录中删除了它。现在,当我尝试运行该程序时,它没有显示任何错误,但一直在说Segmentation fault。很明显,找不到共享对象,但是如何在不复制任何内容的情况下链接它?
我正在使用Ubuntu 11.10
我已经读过C中未初始化的全局变量将占用内存的.bss部分.它也只是一个占位符,不会占用目标文件中的任何空间.
我的问题是,一旦未初始化的全局变量被分配了一些值,它将在哪里存储在物理内存中?
例如:
int a[100];
int main()
{
a[10] = 25;
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,将分配内存位置?
我使用了system("pause")它stdio.h,它没有错误地工作.当我查看stdio函数时,system()是在stdlib中.它是如何工作的,这是代码?
#include <stdio.h>
int main() {
printf("Hello World\n" );
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我可以通过以下代码检索OS X磁盘分区UUID:
void PrintUUID()
{
DADiskRef disk;
CFDictionaryRef descDict;
DASessionRef session = DASessionCreate(NULL);
if (session) {
disk = DADiskCreateFromBSDName(NULL, session, "/dev/disk0s2");
if (disk) {
descDict = DADiskCopyDescription(disk);
if (descDict) {
CFTypeRef value = (CFTypeRef)CFDictionaryGetValue(descDict,
CFSTR("DAVolumeUUID"));
CFStringRef strValue = CFStringCreateWithFormat(NULL, NULL,
CFSTR("%@"), value);
print(strVal); <------------- here is the output
CFRelease(strValue);
CFRelease(descDict);
}
CFRelease(disk);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码检索disk0的UUID,我想检索根磁盘的UUID(挂载点= /),如果我使用"/"代替"/ dev/disk0s2",那么DADiskCopyDescription返回NULL.此外,我知道我可以通过此命令在终端中执行此操作:
diskutil info /
Run Code Online (Sandbox Code Playgroud)
简单地说,如何检索根磁盘的BSD名称?(在DADiskCreateFromBSDName中使用它)
有人有想法吗?谢谢.