当前位置: 首页 > 面试题库 >

未定义的引用'shm_open',已经在此处添加-lrt标志

上官思博
2023-03-14
问题内容

我只是系统崩溃,然后重新安装Ubuntu 11.10,我的代码产生了这个奇怪的错误。

我编写了一个简单的代码示例来测试问题所在:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>

int main (void) {

    int i;

    i = shm_open ("/tmp/shared", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);   printf ("shm_open rc = %d\n", i);

    shm_unlink ("/tmp/shared");

    return (0);
}

编译命令是

gcc -lrt test.c -o test

错误是:

/tmp/ccxVIUiP.o: In function `main':
test.c:(.text+0x21): undefined reference to `shm_open'
test.c:(.text+0x46): undefined reference to `shm_unlink'
collect2: ld returned 1 exit status

我已经添加了-lrt lib,为什么还不能编译?


问题答案:

末尾的库:

gcc test.c -o测试-lrt

从GCC链接选项:

-图书馆
-l库
    链接时搜索名为library的库。 
    (第二种选择将库作为单独的参数
    仅用于POSIX合规性,不建议使用。)

    在命令中写入此选项的位置会有所不同。
    链接器在以下位置搜索和处理库和目标文件:
    指定顺序。
    因此,`foo.o -lz bar.o'在文件foo.o之后搜索库'z',但是
    在bar.o之前 如果bar.o引用`z'中的函数,则这些函数
    可能未加载。


 类似资料:
  • 问题内容: 我正在尝试在操作系统上设置libusb API。我在libusb.org上下载了libusb api。我遵循了标准的安装过程: 然后,我启动了Eclipse C / C ++,并从Internet上的教程中复制了一些代码。但是当尝试构建它时,我得到以下输出: 我在/ lib中有libusb.so,在/ usr / local / include中也有usb.h,在/ usr / loc

  • 大多是前端的新产品,在Vue绝对是新产品。我试图从URL中读取查询参数。以下如何从Vue.js?和https://router.vuejs.org/guide/#javascript的URL获取查询参数 我现在有了这个代码: 但是,在Chrome或Firefox中运行它会产生“无法读取未定义的'query'属性” 定义路由并创建到它们的链接并加载它们,正如《VueRouter指南》中所述。看来Vu

  • 我正在尝试使用AassetManager从android apk访问资产。然而,尽管我已经包含了asset_manager.h和asset_manager_jni.h,但我仍然得到了“对aassetmanager_fromjava的未定义引用”。其他来自asset_manager.h的函数,如AAssetManager_openDir(mgr,"“)等也不能被引用。 以下是完整的代码 这段代码在一

  • 错误:未定义对'pthread_cancel'的引用

  • 问题内容: 我有一个React应用程序,我正在尝试使用来自javascript文件的数据来构建Navbar组件。 我的NavbarData.js文件如下所示: 我正在遍历此数据并在App.js文件中创建组件。 这是我的NavbarItem.js文件 从’react’导入React,{组件}; 所有这些使我看起来像这样。太好了 但我想为每个按钮添加一个监听器。由于这是一个单页应用程序,因此我想呈现一

  • 我试图以编程方式创建一个饼图,希望把它变成一个React组件来重用。基本上,我需要一个饼图,是可点击的,每个切片扩展成一个整体饼当点击。我试图按照这个教程来制作饼图,在底部,我有一个JS的一部分,我试图测试出来。我最终得到了以下是错误消息的截图。 我的理解是,这不是jQuery,只是一个普通的JS。我不确定这是不是真的。我通过CDN导入jQuery,但仍然得到相同的错误。我读了这篇文章,我认为只是