How to recompile ntl and gmp libraries with “-fPIC” flag & make HELib as a shared library &...
a C++ code built into a shared library for HELib is using NTL and GMP static library. But it gets following error:
/usr/bin/ld: /usr/local/lib/libntl.a(FFT.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libntl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
It was suggested int the post Click here
to recompile NTL and GMP with "-fPIC " flags.
I'am not able to find how I should do that.
Edit:
I'm able to build the shared library now after :
recompiling GMP and NTL by:
./configure --enable-shared
for gmp and
./configure SHARED=on
After make Install of HELib. I get error when I run the example codes.
The link to the Makefile : click to see makefile
Error:
g++ -g -O2 -std=c++11 -pthread -DFHE_THREADS -DFHE_BOOT_THREADS -DFHE_DCRT_THREADS -o Test_General_x Test_General.cpp -L/usr/local/lib -lntl -lgmp -lm -lfhe
/usr/local/lib/libfhe.so: undefined reference towrite_raw_int(std::ostream&, long, long)'
read_raw_ZZ(std::istream&, NTL::ZZ&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid write_raw_vector<long>(std::ostream&, std::vector<long, std::allocator<long> > const&)'
writeEyeCatcher(std::ostream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_xdouble(std::ostream&, NTL::xdouble)'
read_ntl_vec_long(std::istream&, NTL::Vec&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid read_raw_vector<long>(std::istream&, std::vector<long, std::allocator<long> >&)'
readEyeCatcher(std::istream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference toread_raw_int(std::istream&, long)'
read_raw_xdouble(std::istream&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_ZZ(std::ostream&, NTL::ZZ const&)'
write_ntl_vec_long(std::ostream&, NTL::Vec const&, long)'
/usr/local/lib/libfhe.so: undefined reference to
collect2: error: ld returned 1 exit status
Makefile:179: recipe for target 'Test_General_x' failed
make: *** [Test_General_x] Error 1
build compilation shared-libraries gmp ntl
|
show 2 more comments
a C++ code built into a shared library for HELib is using NTL and GMP static library. But it gets following error:
/usr/bin/ld: /usr/local/lib/libntl.a(FFT.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libntl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
It was suggested int the post Click here
to recompile NTL and GMP with "-fPIC " flags.
I'am not able to find how I should do that.
Edit:
I'm able to build the shared library now after :
recompiling GMP and NTL by:
./configure --enable-shared
for gmp and
./configure SHARED=on
After make Install of HELib. I get error when I run the example codes.
The link to the Makefile : click to see makefile
Error:
g++ -g -O2 -std=c++11 -pthread -DFHE_THREADS -DFHE_BOOT_THREADS -DFHE_DCRT_THREADS -o Test_General_x Test_General.cpp -L/usr/local/lib -lntl -lgmp -lm -lfhe
/usr/local/lib/libfhe.so: undefined reference towrite_raw_int(std::ostream&, long, long)'
read_raw_ZZ(std::istream&, NTL::ZZ&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid write_raw_vector<long>(std::ostream&, std::vector<long, std::allocator<long> > const&)'
writeEyeCatcher(std::ostream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_xdouble(std::ostream&, NTL::xdouble)'
read_ntl_vec_long(std::istream&, NTL::Vec&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid read_raw_vector<long>(std::istream&, std::vector<long, std::allocator<long> >&)'
readEyeCatcher(std::istream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference toread_raw_int(std::istream&, long)'
read_raw_xdouble(std::istream&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_ZZ(std::ostream&, NTL::ZZ const&)'
write_ntl_vec_long(std::ostream&, NTL::Vec const&, long)'
/usr/local/lib/libfhe.so: undefined reference to
collect2: error: ld returned 1 exit status
Makefile:179: recipe for target 'Test_General_x' failed
make: *** [Test_General_x] Error 1
build compilation shared-libraries gmp ntl
1
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even.../configure --help
gives the answer...
– Marc Glisse
Jan 11 at 17:03
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
1
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try./configure --help | grep -i pic
.
– Marc Glisse
Jan 12 at 7:58
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
1
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.
– Marc Glisse
Jan 12 at 8:08
|
show 2 more comments
a C++ code built into a shared library for HELib is using NTL and GMP static library. But it gets following error:
/usr/bin/ld: /usr/local/lib/libntl.a(FFT.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libntl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
It was suggested int the post Click here
to recompile NTL and GMP with "-fPIC " flags.
I'am not able to find how I should do that.
Edit:
I'm able to build the shared library now after :
recompiling GMP and NTL by:
./configure --enable-shared
for gmp and
./configure SHARED=on
After make Install of HELib. I get error when I run the example codes.
The link to the Makefile : click to see makefile
Error:
g++ -g -O2 -std=c++11 -pthread -DFHE_THREADS -DFHE_BOOT_THREADS -DFHE_DCRT_THREADS -o Test_General_x Test_General.cpp -L/usr/local/lib -lntl -lgmp -lm -lfhe
/usr/local/lib/libfhe.so: undefined reference towrite_raw_int(std::ostream&, long, long)'
read_raw_ZZ(std::istream&, NTL::ZZ&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid write_raw_vector<long>(std::ostream&, std::vector<long, std::allocator<long> > const&)'
writeEyeCatcher(std::ostream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_xdouble(std::ostream&, NTL::xdouble)'
read_ntl_vec_long(std::istream&, NTL::Vec&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid read_raw_vector<long>(std::istream&, std::vector<long, std::allocator<long> >&)'
readEyeCatcher(std::istream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference toread_raw_int(std::istream&, long)'
read_raw_xdouble(std::istream&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_ZZ(std::ostream&, NTL::ZZ const&)'
write_ntl_vec_long(std::ostream&, NTL::Vec const&, long)'
/usr/local/lib/libfhe.so: undefined reference to
collect2: error: ld returned 1 exit status
Makefile:179: recipe for target 'Test_General_x' failed
make: *** [Test_General_x] Error 1
build compilation shared-libraries gmp ntl
a C++ code built into a shared library for HELib is using NTL and GMP static library. But it gets following error:
/usr/bin/ld: /usr/local/lib/libntl.a(FFT.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libntl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
It was suggested int the post Click here
to recompile NTL and GMP with "-fPIC " flags.
I'am not able to find how I should do that.
Edit:
I'm able to build the shared library now after :
recompiling GMP and NTL by:
./configure --enable-shared
for gmp and
./configure SHARED=on
After make Install of HELib. I get error when I run the example codes.
The link to the Makefile : click to see makefile
Error:
g++ -g -O2 -std=c++11 -pthread -DFHE_THREADS -DFHE_BOOT_THREADS -DFHE_DCRT_THREADS -o Test_General_x Test_General.cpp -L/usr/local/lib -lntl -lgmp -lm -lfhe
/usr/local/lib/libfhe.so: undefined reference towrite_raw_int(std::ostream&, long, long)'
read_raw_ZZ(std::istream&, NTL::ZZ&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid write_raw_vector<long>(std::ostream&, std::vector<long, std::allocator<long> > const&)'
writeEyeCatcher(std::ostream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_xdouble(std::ostream&, NTL::xdouble)'
read_ntl_vec_long(std::istream&, NTL::Vec&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference tovoid read_raw_vector<long>(std::istream&, std::vector<long, std::allocator<long> >&)'
readEyeCatcher(std::istream&, char const*)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference toread_raw_int(std::istream&, long)'
read_raw_xdouble(std::istream&)'
/usr/local/lib/libfhe.so: undefined reference to
/usr/local/lib/libfhe.so: undefined reference towrite_raw_ZZ(std::ostream&, NTL::ZZ const&)'
write_ntl_vec_long(std::ostream&, NTL::Vec const&, long)'
/usr/local/lib/libfhe.so: undefined reference to
collect2: error: ld returned 1 exit status
Makefile:179: recipe for target 'Test_General_x' failed
make: *** [Test_General_x] Error 1
build compilation shared-libraries gmp ntl
build compilation shared-libraries gmp ntl
edited Jan 16 at 6:38
4am
asked Jan 11 at 14:40
4am4am
35118
35118
1
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even.../configure --help
gives the answer...
– Marc Glisse
Jan 11 at 17:03
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
1
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try./configure --help | grep -i pic
.
– Marc Glisse
Jan 12 at 7:58
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
1
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.
– Marc Glisse
Jan 12 at 8:08
|
show 2 more comments
1
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even.../configure --help
gives the answer...
– Marc Glisse
Jan 11 at 17:03
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
1
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try./configure --help | grep -i pic
.
– Marc Glisse
Jan 12 at 7:58
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
1
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.
– Marc Glisse
Jan 12 at 8:08
1
1
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even
.../configure --help
gives the answer...– Marc Glisse
Jan 11 at 17:03
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even
.../configure --help
gives the answer...– Marc Glisse
Jan 11 at 17:03
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
1
1
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try
./configure --help | grep -i pic
.– Marc Glisse
Jan 12 at 7:58
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try
./configure --help | grep -i pic
.– Marc Glisse
Jan 12 at 7:58
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
1
1
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?
nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.– Marc Glisse
Jan 12 at 8:08
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?
nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.– Marc Glisse
Jan 12 at 8:08
|
show 2 more comments
1 Answer
1
active
oldest
votes
Marc Glisse provided the answer for the first two parts of the question.For the third part "Undefined Reference error" the answer is I'd not compiled and linked a x.cpp containing the functions that caused the undefined reference into my shared library. hence check : nm -CD /usr/local/lib/libfhe.so to see if these functions are listed with a linking address or not. If not then check which code provides this functionality. Link that code to the shared library.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54148692%2fhow-to-recompile-ntl-and-gmp-libraries-with-fpic-flag-make-helib-as-a-share%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Marc Glisse provided the answer for the first two parts of the question.For the third part "Undefined Reference error" the answer is I'd not compiled and linked a x.cpp containing the functions that caused the undefined reference into my shared library. hence check : nm -CD /usr/local/lib/libfhe.so to see if these functions are listed with a linking address or not. If not then check which code provides this functionality. Link that code to the shared library.
add a comment |
Marc Glisse provided the answer for the first two parts of the question.For the third part "Undefined Reference error" the answer is I'd not compiled and linked a x.cpp containing the functions that caused the undefined reference into my shared library. hence check : nm -CD /usr/local/lib/libfhe.so to see if these functions are listed with a linking address or not. If not then check which code provides this functionality. Link that code to the shared library.
add a comment |
Marc Glisse provided the answer for the first two parts of the question.For the third part "Undefined Reference error" the answer is I'd not compiled and linked a x.cpp containing the functions that caused the undefined reference into my shared library. hence check : nm -CD /usr/local/lib/libfhe.so to see if these functions are listed with a linking address or not. If not then check which code provides this functionality. Link that code to the shared library.
Marc Glisse provided the answer for the first two parts of the question.For the third part "Undefined Reference error" the answer is I'd not compiled and linked a x.cpp containing the functions that caused the undefined reference into my shared library. hence check : nm -CD /usr/local/lib/libfhe.so to see if these functions are listed with a linking address or not. If not then check which code provides this functionality. Link that code to the shared library.
answered Jan 19 at 11:34
4am4am
35118
35118
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54148692%2fhow-to-recompile-ntl-and-gmp-libraries-with-fpic-flag-make-helib-as-a-share%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Why are you linking a dynamic library with a static one? Other than that, please read some doc, even
.../configure --help
gives the answer...– Marc Glisse
Jan 11 at 17:03
Because I'm writing a python wrapper module for the shared library's example code (HELib) and HELib library is dependent on the Libraries GMP and NTL. I tried adding ./configure SHARED=on for NTL and ./configure --enable-shared for GMP but I'am still getting the same error that I got before recompiling it to a shared library.
– 4am
Jan 12 at 5:37
1
If you are getting the same error, it may be that you have several versions of the lib and it isn't picking the right one. Also, I wonder on what system you are that you need to compile GMP/NTL yourself. Anyway, to answer your question, for GMP, try
./configure --help | grep -i pic
.– Marc Glisse
Jan 12 at 7:58
Thank you, as you said , "it may be that you have several versions of the lib and it isn't picking the right one." this was the case.
– 4am
Jan 12 at 8:00
1
Since all your link errors involve istream/ostream and you are using C++11, I suspect an incompatible ABI. Did you compile HElib with the same compiler and options as the example?
nm -CD /usr/local/lib/libfhe.so
and see what looks closest to those undefined references.– Marc Glisse
Jan 12 at 8:08