小编Dan*_*ego的帖子

如何在C中链接共享对象?

我编写了一个使用共享对象的简单程序,并使用打开了该对象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

linux linker gcc shared-libraries

2
推荐指数
2
解决办法
7212
查看次数

C程序中未初始化的内存位置的物理内存位置?

我已经读过C中未初始化的全局变量将占用内存的.bss部分.它也只是一个占位符,不会占用目标文件中的任何空间.

我的问题是,一旦未初始化的全局变量被分配了一些值,它将在哪里存储在物理内存中?

例如:

int a[100];

int main()
{
    a[10] = 25;
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,将分配内存位置?

c

1
推荐指数
1
解决办法
225
查看次数

stdio或stdlib中的system()?

我使用了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)

c std stdio

0
推荐指数
1
解决办法
4739
查看次数

如何以编程方式检索OS X中的根磁盘分区的UUID?

我可以通过以下代码检索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中使用它)

有人有想法吗?谢谢.

macos xcode cocoa objective-c core-foundation

0
推荐指数
1
解决办法
1865
查看次数

标签 统计

c ×2

cocoa ×1

core-foundation ×1

gcc ×1

linker ×1

linux ×1

macos ×1

objective-c ×1

shared-libraries ×1

std ×1

stdio ×1

xcode ×1