This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Which definition is right for "ne10_addc_float_c"?

Hi,

On a Get Start thread of this web site, it has a short NE10 example having such snippet:

      ne10_addc_float_c( thedst1 , thesrc, thecst, ARRAY_LENGTH );
 
      ne10_addc_float_neon( thedst2 , thesrc, thecst, ARRAY_LENGTH );

I install NE10 library. In the documentation, it has a different definition:

ne10_result_t ne10_addc_float_neon (ne10_float32_t *dst, ne10_float32_t *src, const ne10_float32_t cst, ne10_uint32_t count) asm("ne10_addc_float_neon")

I am curious about the last "asm("ne10_addc_float_neon")". Could you tell me that?

Thanks,

  • Excuse me for the previous question. I find that it is caused by the generated documentation, which is wrong after I check the on-line documentation.

    Now, I have a new question when I build another simple example from the right NE10 documentation:

    int main()

    {

         ne10_result_t status;

         printf ("Going to initialize NE10...\n");

         status = ne10_init();

         if (status != NE10_OK)

             printf ("NE10 init failed.\n");

         printf ("NE10 has been initialized.\n");

         test_add1();

         test_add2();

         return 0;

    }

    I find that "

    status = ne10_init();"

    will cause build errors, such as:

    robert@M5100:~/workspace_v5_5/NE10_testHardware0$ arm-linux-gnueabihf-gcc -O2 -o sample testHd.c -I$NE10_INC_PATH -l:$NE10_LIB_PATH/libNE10.a

    /home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec2f_c':

    NE10_len.c:(.text+0x5e): undefined reference to `sqrtf'

    /home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec3f_c':

    NE10_len.c:(.text+0xf4): undefined reference to `sqrtf'

    /home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec4f_c':

    NE10_len.c:(.text+0x18c): undefined reference to `sqrtf'

    I have no idea on how to solve this. Please help me!

  • Hi,

    I would like to add more information about the problem.

    First, the test .c file is from link:

    Project Ne10: File List

    Its path is:

    /home/yang/NE10/NE10_github/Ne10_github_doc/Ne10/samples/NE10_test.c [code]

    Second, it generates an error in test_add1 when compiling.

    00046 void test_add1 (void)

    00047 {

    00048  int i;

    00049 ne10_float32_t thesrc[5];

    00050 ne10_float32_t thecst;

    00051 ne10_float32_t thedst[5];

    00052

    00053  for (i = 0; i < 5; i++)

    00054 {

    00055 thesrc[i] = (ne10_float32_t) rand() / RAND_MAX * 5.0f;

    00056 }

    00057 thecst = (ne10_float32_t) rand() / RAND_MAX * 5.0f;

    00058

    00059  ne10_addc_float (thedst , thesrc, thecst, 5);

    00060 }

    00061

    I have set up the include and library path in the IDE. It seems that it does understand ne10_addc_float in my environment. I originally thought it was a typo. After I changed that to ne10_addcfloat_c, it has the undefined reference errors.

    I also have tried command line for building. It has the same errors.

  • Hi,

    Is there a way to check the included functions inside libNE10.a? I try nm with arm-linux-gnueabihf-nm, but it wants .out input file.

  • Hi,

    As the link: Ne10 Library Getting Started, I build NE10 library again with the following commands:

    $mkdir build
    $cd build
    $cmake
    -DCMAKE_TOOLCHAIN_FILE=../config.cmake ..
    $make


    The generated library is: libNE10.a. I build my project with commands:

    $arm-linux-gnueabihf-ar-gcc O2 -o sample sample.-I$NE10_INC_PATH -l:$NE10_LIB_PATH/libNE10.a

    The undefined reference problem is still there.


    I find that the generated NE10_test_static can run at the target. After some search, I find NE10_test_static uses the following link command under folder (projectNe10-Ne10-4167142/build/samples/CMakeFiles/NE10_test_static.dir) :

    /home/robert/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gcc  -O2 -mthumb-interwork -mthumb -march=armv7-a -mfpu=vfp3CMakeFiles/NE10_test_static.dir/NE10_test.c.o  -o NE10_test_static -rdynamic ../modules/libNE10.a -lm

    It seems that it uses dynamic library. I have not found any way to generate static NE10 library with many options with (ON or OFF)

    LD_LIBRARY_PATH=

    Even after the library path variable is removed, the copied NE10_test_static and my project can run. That is, it does not use the hard drive libNE10.a. I am new to Linux and puzzled by the conflicting facts. I have attached the library, the static test applications and link file. Do you think on my drive libNE10.a is static or dynamic library? How to generate a static libNE10 library?

    Thanks,

  • Hi, Ruwan2,

    >Hi,

    >On a Get Start thread of this web site, it has a short NE10 example having such snippet:

       ne10_addc_float_c( thedst1 , thesrc, thecst, ARRAY_LENGTH );
    >
       ne10_addc_float_neon( thedst2 , thesrc, thecst, ARRAY_LENGTH );

    These 2 functions are different functions, but they have same functionality. Generally, the difference is: ne10_addc_float_c is implemented in C and ne10_addc_float_neon is implemented by assembly and optimized by Neon.

    >

    >I install NE10 library. In the documentation, it has a different definition:

    >

    >ne10_result_t ne10_addc_float_neon (ne10_float32_t *dst, ne10_float32_t *src, const ne10_float32_t cst, ne10_uint32_t count) asm("ne10_addc_float_neon")

    >

    >I am curious about the last "asm("ne10_addc_float_neon")". Could you tell me that?

    the asm() key word is used to specify the name in generated object file. It is a C extension. You can refer more details at http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Asm-Labels.html#Asm-Labels.

    >Thanks,

  • <robert@M5100:~/workspace_v5_5/NE10_testHardware0$ arm-linux-gnueabihf-gcc -O2 -o sample testHd.c -I$NE10_INC_PATH -l:$NE10_LIB_PATH/libNE10.a

    <
    </home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec2f_c':
    <
    <NE10_len.c:(.text+0x5e): undefined reference to `sqrtf'
    <
    </home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec3f_c':
    <
    <NE10_len.c:(.text+0xf4): undefined reference to `sqrtf'
    <
    </home/robert/projectNe10-Ne10-4167142/build/modules/libNE10.a(NE10_len.c.o): In function `ne10_len_vec4f_c':
    <
    <NE10_len.c:(.text+0x18c): undefined reference to `sqrtf'
    <
    <I have no idea on how to solve this. Please help me!

    you should add -lm when you compile your code

  • >I find that the generated NE10_test_static can run at the target. After some search, I find NE10_test_static uses the following link command under folder (projectNe10-Ne10-4167142/build/samples/CMakeFiles/NE10_test_static.dir) :

    >/home/robert/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gcc  -O2 -mthumb-interwork -mthumb -march=armv7-a -mfpu=vfp3CMakeFiles/NE10_test_static.dir/NE10_test.c.o  -o NE10_test_static -rdynamic ../modules/libNE10.a -lm

    >It seems that it uses dynamic library. I have not found any way to generate static NE10 library with many options with (ON or OFF)

    The command you supply is NOT using a dynamic library (refer here: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html for more details about -rdynamic option), it is static linking. You can find related optiones at line 31 and 32 of Ne10 library's root CMakelists.txt (the top CMakelists.txt).

    >Even after the library path variable is removed, the copied NE10_test_static and my project can run. That is, it does not use the hard drive libNE10.a. I am new to Linux and puzzled by the conflicting facts. I have attached the library, the static test applications and link file. Do you think on my drive libNE10.a is static or dynamic library? How to generate a static libNE10 library?

    The libNE10.a is static library. *.a is static library under linux, refer more details: http://en.wikipedia.org/wiki/Static_library.