October 24, 2024
Chicago 12, Melborne City, USA
C#

GCC can not load functions defined in dll.a library in windows: Calling Julia from C


I am trying to call Julia functions from C on windows. I followed the documentation from Julia and everything should work properly, but for some reason it does not. The main problem is that when I am trying to compile with the code bellow I keep getting undefined reference for the functions that I am using from julia: _imp__jl_init _imp__jl_eval_string _imp__jl_atexit_hook.

    #include <julia.h>
    JULIA_DEFINE_FAST_TLS // only define this once, in an executable (not in a shared library) if you want fast code.

    int main(int argc, char *argv[])
    {
        /* required: setup the Julia context */
        jl_init();

        /* run Julia commands */
        jl_eval_string("print(sqrt(2.0))");

        /* strongly recommended: notify Julia that the
             program is about to terminate. this allows
             Julia time to cleanup pending write requests
             and run all finalizers
        */
        jl_atexit_hook(0);
        return 0;
    }

the file is called test.c and I use the following gcc command: gcc -v -o test -march=pentium4 -I%JULIA_DIR%\include\julia -L%JULIA_DIR%\lib test.c -ljulia. The full verbose output I am getting is also bellow:

C:\Users\SComiati\OneDrive - DXC Production\Documents\c-code>gcc -v -o test -march=pentium4 -I%JULIA_DIR%\include\julia -L%JULIA_DIR%\lib test.c -ljulia
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)
COLLECT_GCC_OPTIONS='-v' '-o' 'test.exe' '-march=pentium4' '-I' 'C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia' '-LC:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\lib'
 c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/cc1.exe -quiet -v -I C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia 
-iprefix c:\mingw\bin\../lib/gcc/mingw32/6.3.0/ test.c -quiet -dumpbase test.c -march=pentium4 -auxbase test -version -o C:\Users\SComiati\AppData\Local\Temp\ccSKCncc.s
GNU C11 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32)
        compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "c:\mingw\bin\../lib/gcc/mingw32/6.3.0/../../../../mingw32/include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include"
ignoring duplicate directory "/mingw/lib/gcc/mingw32/6.3.0/../../../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include-fixed"
ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/../../../../mingw32/include"
ignoring duplicate directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia
 c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include
 c:\mingw\bin\../lib/gcc/mingw32/6.3.0/../../../../include
 c:\mingw\bin\../lib/gcc/mingw32/6.3.0/include-fixed
End of search list.
GNU C11 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32)
        compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.3, isl version 0.15
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 384cad586f05ed581a9c068b2f18b408
COLLECT_GCC_OPTIONS='-v' '-o' 'test.exe' '-march=pentium4' '-I' 'C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia' '-LC:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\lib'
 c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/as.exe -v -I C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia -o C:\Users\SComiati\AppData\Local\Temp\ccrWC7dD.o C:\Users\SComiati\AppData\Local\Temp\ccSKCncc.s
GNU assembler version 2.28 (mingw32) using BFD version (GNU Binutils) 2.28
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/6.3.0/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../
COLLECT_GCC_OPTIONS='-v' '-o' 'test.exe' '-march=pentium4' '-I' 'C:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\include\julia' '-LC:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\lib'
 c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/collect2.exe -plugin c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/liblto_plugin-0.dll -plugin-opt=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\SComiati\AppData\Local\Temp\cc24U3oi.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -Bdynamic -o test.exe c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtbegin.o -LC:\Users\SComiati\AppData\Local\Programs\Julia-1.11.1\lib -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../.. C:\Users\SComiati\AppData\Local\Temp\ccrWC7dD.o -ljulia -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtend.o

Anyone has any ideea what is going on?



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video