为 raspberry pi 3 模型 B 交叉编译 libtorrent
Cross compiling libtorrent for raspberry pi 3 model B
我一直在尝试使用以下 config.jam
交叉编译 jlibtorrent for the raspberry pi which uses boost build for compiling. I am using the officially provided cross compiler:
import os ;
using gcc : arm : arm-linux-gnueabihf-g++ :
<cxxflags>-fPIC
<cxxflags>-std=c++14
<cxxflags>-fno-strict-aliasing
<cxxflags>-fvisibility=hidden
<linkflags>-m32
<linkflags>-static-libstdc++
<linkflags>-static-libgcc
<linkflags>"-z noexecstack"
# debug information
<cxxflags>-g
<cxxflags>-gdwarf-4
<cxxflags>-ggdb
;
我基本上复制了 linux-x86 的现有配置并替换了编译器,但我收到以下编译错误:
libtorrent/src/entry.cpp: In member function 'libtorrent::entry& libtorrent::entry::operator[](libtorrent::string_view)':
libtorrent/src/entry.cpp:86:33: error: no matching function for call to
'std::map<std::basic_string<char>, libtorrent::entry, libtorrent::aux::strview_less, std::allocator<std::pair<const std::basic_string<char>, libtorrent::entry> > >::find(libtorrent::string_view&)'
auto const i = dict().find(key);
我唯一的猜测是交叉编译器的版本(4.9.3)与libtorrent不兼容,因为我在linux-32-config.jam中看到它使用g++- 5.还有什么我想念的吗?
您可以找到修改后的存储库 in my github repositories. I am using swig/build-linux-armv7.sh
进行构建。
该调用 (std::map::find()) 已添加到 C++14 中(参见 docs)。我看到您也在命令行中传递了 -std=c++14
。你确定你的 GCC 支持 C++14 吗?好像有点老了。
libtorrent 当前的稳定分支只需要 C++11 支持,如果那是您正在构建的分支,编译器支持检测可能有问题here。如果您从 libtorrent master
构建,它需要适当的 C++14 支持。所以在这种情况下,您可能需要使用稳定版。
感谢@Arvid,我设法使用 libtorrent (RC_1_2) 的当前稳定分支和以下 jam 文件编译了它,您可以找到 here.
import os ;
using gcc : arm : arm-linux-gnueabihf-g++ :
<cxxflags>-fPIC
<cxxflags>-std=c++11
<cxxflags>-fno-strict-aliasing
<cxxflags>-fvisibility=hidden
<linkflags>-static-libstdc++
<linkflags>-static-libgcc
<linkflags>"-z noexecstack"
# debug information
<cxxflags>-g
<cxxflags>-gdwarf-4
<cxxflags>-ggdb;
我一直在尝试使用以下 config.jam
交叉编译 jlibtorrent for the raspberry pi which uses boost build for compiling. I am using the officially provided cross compiler:
import os ;
using gcc : arm : arm-linux-gnueabihf-g++ :
<cxxflags>-fPIC
<cxxflags>-std=c++14
<cxxflags>-fno-strict-aliasing
<cxxflags>-fvisibility=hidden
<linkflags>-m32
<linkflags>-static-libstdc++
<linkflags>-static-libgcc
<linkflags>"-z noexecstack"
# debug information
<cxxflags>-g
<cxxflags>-gdwarf-4
<cxxflags>-ggdb
;
我基本上复制了 linux-x86 的现有配置并替换了编译器,但我收到以下编译错误:
libtorrent/src/entry.cpp: In member function 'libtorrent::entry& libtorrent::entry::operator[](libtorrent::string_view)':
libtorrent/src/entry.cpp:86:33: error: no matching function for call to
'std::map<std::basic_string<char>, libtorrent::entry, libtorrent::aux::strview_less, std::allocator<std::pair<const std::basic_string<char>, libtorrent::entry> > >::find(libtorrent::string_view&)'
auto const i = dict().find(key);
我唯一的猜测是交叉编译器的版本(4.9.3)与libtorrent不兼容,因为我在linux-32-config.jam中看到它使用g++- 5.还有什么我想念的吗?
您可以找到修改后的存储库 in my github repositories. I am using swig/build-linux-armv7.sh
进行构建。
该调用 (std::map::find()) 已添加到 C++14 中(参见 docs)。我看到您也在命令行中传递了 -std=c++14
。你确定你的 GCC 支持 C++14 吗?好像有点老了。
libtorrent 当前的稳定分支只需要 C++11 支持,如果那是您正在构建的分支,编译器支持检测可能有问题here。如果您从 libtorrent master
构建,它需要适当的 C++14 支持。所以在这种情况下,您可能需要使用稳定版。
感谢@Arvid,我设法使用 libtorrent (RC_1_2) 的当前稳定分支和以下 jam 文件编译了它,您可以找到 here.
import os ;
using gcc : arm : arm-linux-gnueabihf-g++ :
<cxxflags>-fPIC
<cxxflags>-std=c++11
<cxxflags>-fno-strict-aliasing
<cxxflags>-fvisibility=hidden
<linkflags>-static-libstdc++
<linkflags>-static-libgcc
<linkflags>"-z noexecstack"
# debug information
<cxxflags>-g
<cxxflags>-gdwarf-4
<cxxflags>-ggdb;