Ошибка nvcc при компиляции ошибки ld неопределенная ссылка на символ 'XConvertSelection'

Я пытаюсь скомпилировать nvcc, который работает на других машинах и кластерах, теперь, когда я работаю на машине x86-64, я получаю ошибки для relocation R_X86_64_32 against ... различных файлов lib и ошибок. размещение --compiler-options после соответствующих библиотек, помеченных ошибками. добавление -fPIC после приводит к возврату ошибки. Так что я очень смущен.

Команда (легко читается):

nvcc -o exe/prog src/main.cu -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode arch=compute_37,code=sm_37 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_52,code=sm_52 -gencode=arch=compute_52,code=compute_52 -L/home/mohamed/PhD/VENV/lib -L/home/mohamed/PhD/VENV/glew-1.10.0/lib -llua -lGLEW -lglfw3 -lcuda -lGLU -ljpeg -lGL -lGLU -lglfw3 --compiler-options -lX11 -lXxf86vm -lXrandr -lpthread -lXi -I ./code_generator_lua/utils/ -I/home/mohamed/PhD/VENV/include/GLFW -I/home/mohamed/PhD/VENV/glew-1.10.0/include -I ./utils2/visualisation -D WITH_OPENGL -I ./geo -I/home/mohamed/PhD/VENV/lua-5.1.5/src -I/home/mohamed/PhD/VENV/boost_1_61_0 -I/usr/local/cuda-7.5/samples/common/inc

Вот мой вывод командной строки компиляции (терминал) (пожалуйста, игнорируйте предупреждения - они нормальные):

nvcc -o exe/prog src/main.cu -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode arch=compute_37,code=sm_37 -gencode=arch=compute_50,code=sm_50 -gencode=arch=compute_52,code=sm_52 -gencode=arch=compute_52,code=compute_52 -L/home/mohamed/PhD/VENV/lib -L/home/mohamed/PhD/VENV/glew-1.10.0/lib -llua -lGLEW -lglfw3 -lcuda -lGLU -ljpeg -lGL -lGLU -lglfw3 --compiler-options -lX11 -lXxf86vm -lXrandr -lpthread -lXi -I ./code_generator_lua/utils/ -I/home/mohamed/PhD/VENV/include/GLFW -I/home/mohamed/PhD/VENV/glew-1.10.0/include -I ./utils2/visualisation -D WITH_OPENGL -I ./geo -I/home/mohamed/PhD/VENV/lua-5.1.5/src -I/home/mohamed/PhD/VENV/boost_1_61_0 -I/usr/local/cuda-7.5/samples/common/inc

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/home/mohamed/PhD/VENV/boost_1_61_0/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp(75): warning: variable "tmp" was set but never used

src/main.cu(364): warning: variable "fname2" was declared but never referenced

src/main.cu(392): warning: conversion from a string literal to "char *" is deprecated

/usr/bin/ld: /home/mohamed/PhD/VENV/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status


person Malieh    schedule 25.02.2020    source источник
comment
stackoverflow.com/q/28531014/681865   -  person talonmies    schedule 25.02.2020
comment
добавив, что я пробовал то, что было на этой странице, это не привело к компиляции. или я не знаю, как пометить pkg-config --static --libs ошибками, вызывающими неизвестную команду -static при ее удалении приводит к неизвестной команде -libs @talonmies   -  person Malieh    schedule 25.02.2020
comment
как мне попробовать добавить pkg-config? Я начинаю впадать в отчаяние.   -  person Malieh    schedule 25.02.2020


Ответы (1)


Я исправил проблему для всех тех, кто использует новые системы и старые коды. На самом деле это была проблема с ошибкой relocation R_X86_64_32 ... из-за статических и динамических библиотек. Теперь решение для этого можно найти, запустив gcc, в моем случае nvcc с флагом no-pie, если вы используете версии gcc и g++ ‹4.8. Кроме того, чтобы убедиться, что даже в gcc 4.8 этот пирог не был включен по умолчанию. Вы можете проверить включенные значения по умолчанию, проверив версию gcc -v.

person Malieh    schedule 09.03.2020
comment
Вы можете использовать -fno-pie, чтобы позволить GCC создавать более эффективный код (например, для индексации статических массивов), когда он знает, что объектный файл не должен быть связан с PIE. (И да, большинство современных дистрибутивов настраивают GCC по умолчанию для создания PIE, поэтому по умолчанию используется -fPIE -pie). 32-битные абсолютные адреса больше не разрешены в x86-64 Linux? - person Peter Cordes; 10.03.2020
comment
@PeterCordes спасибо, очень полезная информация, особенно для тех, кто недавно перешел на более новую систему и не имеет всесторонних знаний о Linux и gcc, как я. - person Malieh; 16.03.2020