labstreaminglayer / pylsl

Python bindings (pylsl) for liblsl
MIT License
142 stars 58 forks source link

LSL binary library file was not found on raspberry pi #76

Closed Lim0304 closed 10 months ago

Lim0304 commented 10 months ago

I also have the issue: LSL binary library file was not found. Please make sure that the binary file can be found in the package lib folder (/home/boris/.local/lib/python3.9/site-packages/pylsl/lib) or the system search path. But when I try the method in other answer :bash -e standalone_compilation_linux.sh, it have some problems , and didn’t generate liblsl.so file. How can I solve this? the output paste:

pi@raspberrypi:~ $ cd liblsl
pi@raspberrypi:~/liblsl $ bash -e standalone_compilation_linux.sh
++ git describe --tags HEAD
+ echo v1.16.2-22-g4210bb6e
v1.16.2-22-g4210bb6e
+ g++ -fPIC -fvisibility=hidden -O2 -Ilslboost -DBOOST_ALL_NO_LIB -DASIO_NO_DEPRECATED -DLOGURU_DEBUG_LOGGING=0 '-DLSL_LIBRARY_INFO_STR="v1.16.2-22-g4210bb6e"' src/api_config.cpp src/buildinfo.cpp src/cancellation.cpp src/common.cpp src/consumer_queue.cpp src/data_receiver.cpp src/info_receiver.cpp src/inlet_connection.cpp src/lsl_inlet_c.cpp src/lsl_outlet_c.cpp src/lsl_resolver_c.cpp src/lsl_streaminfo_c.cpp src/lsl_xml_element_c.cpp src/netinterfaces.cpp src/resolve_attempt_udp.cpp src/resolver_impl.cpp src/sample.cpp src/send_buffer.cpp src/socket_utils.cpp src/stream_info_impl.cpp src/stream_outlet_impl.cpp src/tcp_server.cpp src/time_postprocessor.cpp src/time_receiver.cpp src/udp_server.cpp src/util/cast.cpp src/util/endian.cpp src/util/inireader.cpp src/util/strfuns.cpp thirdparty/pugixml/pugixml.cpp -Ithirdparty/pugixml thirdparty/loguru/loguru.cpp -Ithirdparty/loguru -Ithirdparty/asio -shared -o liblsl.so -lpthread -lrt -ldl
In file included from /usr/include/c++/8/vector:69,
                 from src/netinterfaces.h:5,
                 from src/resolve_attempt_udp.h:6,
                 from src/resolve_attempt_udp.cpp:1:
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry&}; _Tp = asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry; _Alloc = std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry>]':
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> >::iterator' {aka '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >'} changed in GCC 7.1
       vector<_Tp, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:64,
                 from src/netinterfaces.h:5,
                 from src/resolve_attempt_udp.h:6,
                 from src/resolve_attempt_udp.cpp:1:
/usr/include/c++/8/bits/stl_vector.h: In member function 'void asio::detail::epoll_reactor::schedule_timer(asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename asio::detail::timer_queue<Time_Traits>::per_timer_data&, asio::detail::wait_op*) [with Time_Traits = asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> >]':
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >' changed in GCC 7.1
    _M_realloc_insert(end(), __x);
    ^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:69,
                 from src/common.h:12,
                 from src/resolver_impl.h:5,
                 from src/resolver_impl.cpp:1:
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const lsl::stream_info_impl&}; _Tp = lsl::stream_info_impl; _Alloc = std::allocator<lsl::stream_info_impl>]':
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<lsl::stream_info_impl>::iterator' {aka '__gnu_cxx::__normal_iterator<lsl::stream_info_impl*, std::vector<lsl::stream_info_impl> >'} changed in GCC 7.1
       vector<_Tp, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:64,
                 from src/common.h:12,
                 from src/resolver_impl.h:5,
                 from src/resolver_impl.cpp:1:
/usr/include/c++/8/bits/stl_vector.h: In member function 'std::vector<lsl::stream_info_impl> lsl::resolver_impl::results(uint32_t)':
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<lsl::stream_info_impl*, std::vector<lsl::stream_info_impl> >' changed in GCC 7.1
    _M_realloc_insert(end(), __x);
    ^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:69,
                 from src/common.h:12,
                 from src/resolver_impl.h:5,
                 from src/resolver_impl.cpp:1:
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry&}; _Tp = asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry; _Alloc = std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry>]':
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> >::iterator' {aka '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >'} changed in GCC 7.1
       vector<_Tp, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/vector:64,
                 from src/common.h:12,
                 from src/resolver_impl.h:5,
                 from src/resolver_impl.cpp:1:
/usr/include/c++/8/bits/stl_vector.h: In member function 'void asio::detail::epoll_reactor::schedule_timer(asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename asio::detail::timer_queue<Time_Traits>::per_timer_data&, asio::detail::wait_op*) [with Time_Traits = asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> >]':
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >' changed in GCC 7.1
    _M_realloc_insert(end(), __x);
    ^~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/stl_vector.h: In member function 'std::vector<lsl::stream_info_impl> lsl::resolver_impl::resolve_oneshot(const string&, int, double, double)':
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<lsl::stream_info_impl*, std::vector<lsl::stream_info_impl> >' changed in GCC 7.1
    _M_realloc_insert(end(), __x);
    ^~~~~~~~~~~~~~~~~
src/sample.cpp: In member function 'void lsl::sample::load_streambuf(std::streambuf&, int, bool, bool)':
src/sample.cpp:260:38: error: invalid conversion from 'const void*' to 'void*' [-fpermissive]
    if (len > 0) load_raw(sb, str.data(), len);
                              ~~~~~~~~^~
src/sample.cpp:164:41: note:   initializing argument 2 of 'void load_raw(std::streambuf&, void*, std::size_t)'
 void load_raw(std::streambuf &sb, void *address, std::size_t count) {
                                   ~~~~~~^~~~~~~
In file included from /usr/include/c++/8/vector:69,
                 from thirdparty/asio/asio/detail/impl/service_registry.ipp:19,
                 from thirdparty/asio/asio/detail/service_registry.hpp:161,
                 from thirdparty/asio/asio/impl/execution_context.hpp:20,
                 from thirdparty/asio/asio/execution_context.hpp:407,
                 from thirdparty/asio/asio/any_io_executor.hpp:23,
                 from thirdparty/asio/asio/basic_socket_acceptor.hpp:19,
                 from thirdparty/asio/asio/ip/tcp.hpp:19,
                 from src/socket_utils.h:4,
                 from src/time_receiver.h:4,
                 from src/time_receiver.cpp:1:
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {std::pair<double, double>}; _Tp = std::pair<double, double>; _Alloc = std::allocator<std::pair<double, double> >]':
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<std::pair<double, double> >::iterator' {aka '__gnu_cxx::__normal_iterator<std::pair<double, double>*, std::vector<std::pair<double, double> > >'} changed in GCC 7.1
       vector<_Tp, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {std::pair<double, double>}; _Tp = std::pair<double, double>; _Alloc = std::allocator<std::pair<double, double> >]':
/usr/include/c++/8/bits/vector.tcc:109:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<std::pair<double, double>*, std::vector<std::pair<double, double> > >' changed in GCC 7.1
    _M_realloc_insert(end(), std::forward<_Args>(__args)...);
    ^~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry&}; _Tp = asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry; _Alloc = std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry>]':
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> >::iterator' {aka '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >'} changed in GCC 7.1
       vector<_Tp, _Alloc>::
       ^~~~~~~~~~~~~~~~~~~
/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> >::iterator' {aka '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >'} changed in GCC 7.1
In file included from /usr/include/c++/8/vector:64,
                 from thirdparty/asio/asio/detail/impl/service_registry.ipp:19,
                 from thirdparty/asio/asio/detail/service_registry.hpp:161,
                 from thirdparty/asio/asio/impl/execution_context.hpp:20,
                 from thirdparty/asio/asio/execution_context.hpp:407,
                 from thirdparty/asio/asio/any_io_executor.hpp:23,
                 from thirdparty/asio/asio/basic_socket_acceptor.hpp:19,
                 from thirdparty/asio/asio/ip/tcp.hpp:19,
                 from src/socket_utils.h:4,
                 from src/time_receiver.h:4,
                 from src/time_receiver.cpp:1:
/usr/include/c++/8/bits/stl_vector.h: In member function 'void asio::detail::epoll_reactor::schedule_timer(asio::detail::timer_queue<Time_Traits>&, const typename Time_Traits::time_type&, typename asio::detail::timer_queue<Time_Traits>::per_timer_data&, asio::detail::wait_op*) [with Time_Traits = asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> >]':
/usr/include/c++/8/bits/stl_vector.h:1085:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry*, std::vector<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry, std::allocator<asio::detail::timer_queue<asio::detail::chrono_time_traits<std::chrono::_V2::steady_clock, asio::wait_traits<std::chrono::_V2::steady_clock> > >::heap_entry> > >' changed in GCC 7.1
    _M_realloc_insert(end(), __x);
    ^~~~~~~~~~~~~~~~~
tstenner commented 10 months ago

Looks like the newest GCC versions don't accept something any more. Time to grab my raspberry pi from its box and test it...

Lim0304 commented 10 months ago

Waiting your reply.....

Lim0304 commented 10 months ago

My gcc versions is 8.3.0. Should I change the version of it?

tstenner commented 10 months ago

I pushed an commit that adds an explicit cast. This should work with GCC 8.3.

Lim0304 commented 10 months ago

Can I repeat the previous operation now?

tstenner commented 10 months ago

Sure. I'm couldn't test it with my GCC 12, but clang compiles it in the non-permissive mode.

Lim0304 commented 10 months ago

Thank you!it works.

cboulay commented 9 months ago

FYI I added a liblsl deb file for bookworm (latest Rapsberry Pi OS) here; https://github.com/sccn/liblsl/releases/tag/v1.16.2