当我为armneon打开矢量化标志(mfpu=neon-mfloat abi=softfp)时,我会得到编译器错误。我不明白出了什么问题。我需要在Eigen库中为ARM NEON启用任何预处理器指令吗?
主c
#include<iostream>
#include <Eigen/Core>
// import most common Eigen types
using namespace Eigen;
int main(int, char *[])
{
Matrix4f m3;
m3 << 1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9, 0, 0, 0, 0, 0;
Matrix4f m4;
asm("#begins here");
m4 = m3*m3;
asm("#ends here");
std::cout << "m3\n" << m3 << "\nm4:\n"
<< m4 << std::endl;
std::cout << "DONE!!";
}
main: main.cpp
g++ -mfpu=neon -mfloat-abi=softfp -I /home/ubuntu/Documents/eigen/ main.cpp -o main
错误
ubuntu@ubuntu-desktop:~/Documents/mat_mul$ make
g++ -mfpu=neon -mfloat-abi=softfp -I /home/ubuntu/Documents/eigen/ main.cpp -o main
In file included from /home/ubuntu/Documents/eigen/Eigen/Core:227,
from main.cpp:2:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_packet_traits<T>::type Eigen::ei_pload(const Scalar*) [with Scalar = float]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:163: error: cannot convert âconst float*â to âconst float32_t*â for argument â1â to â__builtin_neon_sf __vector__ vld1q_f32(const float32_t*)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_packet_traits<T>::type Eigen::ei_ploadu(const Scalar*) [with Scalar = float]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:166: error: cannot convert âconst float*â to âconst float32_t*â for argument â1â to â__builtin_neon_sf __vector__ vld1q_f32(const float32_t*)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âvoid Eigen::ei_pstore(Scalar*, const Packet&) [with Scalar = float, Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:169: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1q_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âvoid Eigen::ei_pstoreu(Scalar*, const Packet&) [with Scalar = float, Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:172: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1q_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_unpacket_traits<T>::type Eigen::ei_pfirst(const Packet&) [with Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:179: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1q_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_unpacket_traits<T>::type Eigen::ei_predux(const Packet&) [with Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:216: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_unpacket_traits<T>::type Eigen::ei_predux_mul(const Packet&) [with Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:289: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_unpacket_traits<T>::type Eigen::ei_predux_min(const Packet&) [with Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:320: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1_f32(float32_t*, __builtin_neon_sf __vector__)â
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h: In function âtypename Eigen::ei_unpacket_traits<T>::type Eigen::ei_predux_max(const Packet&) [with Packet = __builtin_neon_sf __vector__]â:
/home/ubuntu/Documents/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:348: error: cannot convert âfloat*â to âfloat32_t*â for argument â1â to âvoid vst1_f32(float32_t*, __builtin_neon_sf __vector__)â
make: *** [main] Error 1
ubuntu@ubuntu-desktop:~/Documents/mat_mul$
我在使用代码源工具链时遇到的错误
ubuntu@ubuntu-desktop:~/Documents/CodeSourcery_WS/Test_Eigen$ make
/home/ubuntu/CodeSourcery/Sourcery_G++/bin/arm-none-linux-gnueabi-c++ -mfpu=neon -mfloat-abi=softfp -I /home/ubuntu/Documents/eigen/ main.cpp -o main
In file included from main.cpp:1:
/home/ubuntu/CodeSourcery/Sourcery_G++/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/include/c++/4.4.1/iostream:39: fatal error: bits/c++config.h: No such file or directory
compilation terminated.
make: *** [main] Error 1