首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建共享对象时不能使用针对`_nc_globals的重定位R_X86_64_32;在安装readline时使用-fPIC重新编译

创建共享对象时不能使用针对_nc_globals的重定位R_X86_64_32是一个错误信息,它通常出现在编译或链接共享对象时。这个错误表明在编译或链接过程中,使用了不兼容的重定位类型。

具体来说,_nc_globals是ncurses库中的一个全局变量,而R_X86_64_32是一种特定的重定位类型,用于32位x86_64架构的目标文件。这个错误的原因可能是在编译或链接过程中,尝试将32位的重定位类型应用于64位的目标文件。

解决这个错误的方法是重新编译安装readline库,并使用-fPIC选项来生成位置无关代码(Position Independent Code)。位置无关代码是一种可以在内存中的任何位置加载和执行的代码,它不依赖于特定的内存地址。这样可以避免在共享对象中使用不兼容的重定位类型。

以下是一个示例的解决方案:

  1. 下载readline源代码,并解压缩。
  2. 进入解压后的readline目录。
  3. 执行以下命令重新配置编译选项:
  4. 执行以下命令重新配置编译选项:
  5. 这将使用-fPIC选项重新配置编译选项。
  6. 执行以下命令进行编译和安装:
  7. 执行以下命令进行编译和安装:
  8. 这将重新编译readline库,并将其安装到系统中。
  9. 在编译或链接其他共享对象时,确保不再出现_nc_globals的重定位R_X86_64_32错误。

需要注意的是,以上解决方案是基于假设问题出现在readline库的情况下。实际情况可能因具体环境和代码而异。如果问题仍然存在,建议查看编译或链接过程中的详细日志,以确定具体的错误原因,并采取相应的解决措施。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

cmake:动态链接库(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++

将tcmalloc作为动态库使用,非常方便,网上有很多资料介绍了。tcmalloc.a也可以以静态链接的方式加入应用程序中,大概因为使用太方便,网上关于这方面的介绍都是一笔带过,但是如果要在动态 库(so)中静态编译tcmalloc,却是有所不同的。 我的项目中有一个so动态库,需要在java中通过jni调用,因为涉及频繁的内存分配操作所以这个so希望用tcmalloc管理内存池以提高系统运行效率,如果使用以动态库方式使用tcmalloc。那么在应用服务器(tomcat)启动的时候,需要先设置LD_PRELOAD参数指向tcmalloc.so,然后执行startup.sh启动tomcat。这样以来,不仅是我的so库,整java程序在运行过程中的所有向操作系统申请释放内存的过程都交给了tcmalloc管理了,其实挺好的。使用这种方案,我的so库代码不需要在编译时链接tcmalloc,什么都不用改变,就能使用tcmalloc。 但是凡事有利就有弊,这个方案带的成本就是在系统安装、维护时稍显复杂:需要在服务器上安装tcmalloc和libunwind(应用系统运行在64位操作系统下),还可能需要修改tomcat启动脚本以加入LD_PRELOAD参数,对工程实施人员的要求比较高。

01

Python3.5 tab补全 yum

最近在弄服务器的部署,在安装python那里耗了很久,执行python时,出现import readline,ImportError: No module named readline。后来查找原因是readline没有安装成功,然后在SUSE的安装盘中找到readline-32bit-5.1-24.26.20.x86_64.rpm,readline-5.1-24.26.20.x86_64.rpm,readline-devel-32bit-5.1-24.26.20.x86_64.rpm,readline-devel-5.1-24.26.20.x86_64.rpm。安装这四个包之后重新编译安装,发现还是不行。然后我就把make的输出全部定位到文件中去,make > make.log。这个之后我发现有这个一个错误输出,can not load shared object  libreadline-so.6,然后做一个连接文件到libreadline,ln -s /usr/local/lib/libreadline.so.6.2 /usr/lib64/libreadline.so.6。然后重新编译安装python。运行python的时候就没有再报错了。

02

C/C++常见gcc编译链接错误解决方法

用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。) 1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a ) /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress': /home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress' /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc': /home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress' 2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed) /usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name': /home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once' 3) 下面这个是因为没有指定链接参数-lrt /usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow': timeval.c:(.text+0xe9): undefined reference to `clock_gettime' 4) 下面这个是因为没有指定链接参数-ldl /usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen' dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym' dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose' 5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库 ld: attempted static link of dynamic object 如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE 6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数 relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object 7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h test.cpp:35: error: expected `)' before 'PRIu64' 8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4 ../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test': ../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4' 9) 下列错误可能是因为多了个“}” error: expected d

03
领券