AlexeyAB / yolo-windows

a yolo windows version(for object detection)
71 stars 58 forks source link

Compile errors with yolo2_light #10

Closed georgeokelly closed 6 years ago

georgeokelly commented 6 years ago

I have some trouble with yolo2_light,

in README.md, it says To compile for CPU just do make on Linux

when I do that it turns out

find . -name "*.sh" -exec chmod +x {} \;
gcc  -Wall -Wfatal-errors -Ofast obj/main.o obj/additionally.o obj/box.o obj/yolov2_forward_network.o -o bin/darknet -lm -pthread 
obj/main.o: In function `test_detector_cpu':
main.c:(.text+0x4e0): undefined reference to `network_predict_quantized'
collect2: error: ld returned 1 exit status
make: *** [bin/darknet] Error 1

I wonder if I should do sth. to Makefile or there're any other solutions?

AlexeyAB commented 6 years ago

Hi, I fixed it. Try to update your code from github.

georgeokelly commented 6 years ago

thank you for your reply. but it goes like this:

In file included from ./src/yolov2_forward_network_quantized.c:210:0:
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ammintrin.h: At top level:
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ammintrin.h:31:3: error: #error "SSE4A instruction set not enabled"
 # error "SSE4A instruction set not enabled"
   ^
compilation terminated due to -Wfatal-errors.
make: *** [obj/yolov2_forward_network_quantized.o] Error 1

and my ammintrin.h is as follows.

#ifndef _AMMINTRIN_H_INCLUDED
#define _AMMINTRIN_H_INCLUDED

#ifndef __SSE4A__
# error "SSE4A instruction set not enabled"
#else

/* We need definitions from the SSE3, SSE2 and SSE header files*/
#include <pmmintrin.h>

extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_stream_sd (double * __P, __m128d __Y)
{
  __builtin_ia32_movntsd (__P, (__v2df) __Y);
}

extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_stream_ss (float * __P, __m128 __Y)
{
  __builtin_ia32_movntss (__P, (__v4sf) __Y);
}

extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_extract_si64 (__m128i __X, __m128i __Y)
{
  return (__m128i) __builtin_ia32_extrq ((__v2di) __X, (__v16qi) __Y);
}

#ifdef __OPTIMIZE__
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_extracti_si64 (__m128i __X, unsigned const int __I, unsigned const int __L)
{
  return (__m128i) __builtin_ia32_extrqi ((__v2di) __X, __I, __L);
}
#else
#define _mm_extracti_si64(X, I, L)                  \
  ((__m128i) __builtin_ia32_extrqi ((__v2di)(__m128i)(X),       \
                    (unsigned int)(I), (unsigned int)(L)))
#endif

extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_insert_si64 (__m128i __X,__m128i __Y)
{
  return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
}

#ifdef __OPTIMIZE__
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_inserti_si64(__m128i __X, __m128i __Y, unsigned const int __I, unsigned const int __L)
{
  return (__m128i) __builtin_ia32_insertqi ((__v2di)__X, (__v2di)__Y, __I, __L);
}
#else
#define _mm_inserti_si64(X, Y, I, L)                    \
  ((__m128i) __builtin_ia32_insertqi ((__v2di)(__m128i)(X),     \
                      (__v2di)(__m128i)(Y),     \
                      (unsigned int)(I), (unsigned int)(L)))
#endif

#endif /* __SSE4A__ */

#endif /* _AMMINTRIN_H_INCLUDED */
AlexeyAB commented 6 years ago

@georgeokelly Now I fixed it and tested on both Windows and Linux.

georgeokelly commented 6 years ago

Well it works now, Thanks for the help!