Cannot locate symbol 'archive_version_details' in native library 'libarchive.so.13'
Closed this issue · 5 comments
===> Testing: Libarchive:ver<0.1>:authgithub:CurtTilmes
[Libarchive] Cannot locate symbol 'archive_version_details' in native library 'libarchive.so.13'
[Libarchive] in method setup at /opt/rakudo-pkg/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 299
[Libarchive] in block archive_version_details at /opt/rakudo-pkg/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 590
[Libarchive] in method lib-version at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive.pm6 (Libarchive) line 61
[Libarchive] in block at t/02-simple-tar-memory.t6 line 5
[Libarchive] Cannot locate symbol 'archive_write_set_format_filter_by_ext' in native library 'libarchive.so.13'
[Libarchive] in method setup at /opt/rakudo-pkg/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 299
[Libarchive] in block archive_write_set_format_filter_by_ext at /opt/rakudo-pkg/share/perl6/core/sources/947BDAB9F96E0E5FCCB383124F923A6BF6F8D76B (NativeCall) line 590
[Libarchive] in method open at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 109
[Libarchive] in method new at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 87
[Libarchive] in block at t/03-simple-tar-file.t6 line 16
[Libarchive] No such format 'raw'
[Libarchive] in method write-options at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 186
[Libarchive] in method open at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 101
[Libarchive] in method new at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 87
[Libarchive] in sub archive-encode at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Filter.pm6 (Libarchive::Filter) line 48
[Libarchive] in block at t/08-filter.t6 line 12
===> Testing [FAIL]: Libarchive:ver<0.1>:authgithub:CurtTilmes
Aborting due to test failure: Libarchive:ver<0.1>:authgithub:CurtTilmes (use --force-test to override)
]# cat /etc/*-release
CentOS Linux release 7.9.2009 (Core
yum list libarchive
libarchive.x86_64 3.1.2-14.el7_7
Any ideas?
Hello,
it looks like the version of libarchive you're using lacks the symbol archive_version_details
, so it might be a problem of the distribution you're using.
To be sure of it try and inspect the symbols provided by the library:
$ nm -D /usr/lib/x86_64-linux-gnu/libarchive.so.13|grep archive_version_details
(the path of libarchive.so.13 may be different on your computer)
In my case I see this result:
000000000006ab70 T archive_version_details
so that symbol exists in my version of the library, which BTW is 13.4.3.
Hi @frithnanth
Thanks for the response - however, I could see that the library was missing 'archive_version_details'. It is not so helpful to just say this and then close the issue. No offense, but I would have thought you would be more interested in this problem (assuming you want people to be able to use your code across multiple distributions). I am trying to install Spreadsheet::XLSX and this appears to be the only dependency giving me problems.
So I uninstalled the libarchive package located by my package manager, and cloned and built the version from github. Then I needed to symlink the files in the library since the install process doesn't know to look in the place where "make install" puts the files. Now I have this error:
===> Testing: Libarchive:ver<0.1>:authgithub:CurtTilmes
[Libarchive] # libarchive 3.5.3dev zlib/1.2.7 liblzma/5.2.2
[Libarchive] Using external bzip2 program
[Libarchive] in method write-options at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 192
[Libarchive] in method open at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 101
[Libarchive] in method new at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Write.pm6 (Libarchive::Write) line 87
[Libarchive] in sub archive-encode at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Filter.pm6 (Libarchive::Filter) line 48
[Libarchive] in sub bzip2 at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive/Filter.pm6 (Libarchive::Filter) line 79
[Libarchive] in block at t/08-filter.t6 line 90
===> Testing [FAIL]: Libarchive:ver<0.1>:authgithub:CurtTilmes
Aborting due to test failure: Libarchive:ver<0.1>:authgithub:CurtTilmes (use --force-test to override)
That line appears to die without reporting an actual error message. (I've tried running the tests manually, with the same output) bzip2 does exist on the system. Any ideas or do I need to wade in with the debugger?
Hi @whatnext I'm sorry if it seemed that I was dismissing the problem. It's just that I'm not familiar with RH (or RH-like) distributions, so I was not sure I could add anything useful.
About the problem you reported in your last comment, did you run ldconfig
to refresh the dynamic library cache?
That is the first thing that crossed my mind; if I think of anything more appropriate I'll let you know.
I forced the install in the end since it was only the one test that was failing. I don't know if would be helpful for these errors to output error messages? They just seem to die without returning anything. Just a suggestion, anway... :)
Hi @whatnext ,
please note that the error you reported is marked as [Libarchive]
, contributed by Curt Tilmes.
That module uses my Archive::Libarchive::Raw, but the error is reported as in method lib-version at /root/.zef/store/Libarchive-0.1.tar.gz/Libarchive-0.1/lib/Libarchive.pm6 (Libarchive) line 61
.
The test suite of Archive::Libarchive::Raw does not explicitly call the version reporting C functions, as their result may vary according to the installed C library.
There is a test for those functions in my module, but needs to be called with an environment variable set, and it's used only to check that the entire C library has been covered.
For example, this is how the test works during an installation process:
$ t/01-version.rakutest
ok 1 - # SKIP version number
ok 2 - # SKIP version string
ok 3 - # SKIP version details
ok 4 - # SKIP linked zlib version
ok 5 - # SKIP linked liblzma version
ok 6 - # SKIP linked bzlib version
ok 7 - # SKIP linked liblz4 version
1..7
but to show the actual results it has to be run by hand as TEST_AUTHOR=1 t/01-version.rakutest
I hope this helps.