07-18-2023 05:50 AM
The specific issue we are having is as follows.
Using the NI Linux Real Time Cross Compile Toolchain with Visual Studio Code, setup from the below link, we are generating build files for our drivers.
https://nilrt-docs.ni.com/cross_compile/cross_compile_index.html
Then we compile them with Ninja using gcc and g++
At this point the linking fails and we get several errors like the following line.
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3608): undefined reference to `__imp_WaitForSingleObject'
Full error output:
* The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command ninja" terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.
* Executing task: cmake -G Ninja C:\Users\e443988\Documents\DTS-SITU\DCPower/build
-- The C compiler identification is GNU 10.3.0
-- The CXX compiler identification is GNU 10.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/x86_64-nilrt-linux-gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/x86_64-nilrt-linux-g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/e443988/Documents/DTS-SITU/DCPower/build
* Terminal will be reused by tasks, press any key to close it.
* Executing task: ninja
[2/2] Linking CXX executable bin\DCPower
FAILED: bin/DCPower
cmd.exe /C "cd . && C:\build\9.2\x64\sysroots\x86_64-w64-mingw32\usr\bin\x86_64-nilrt-linux\x86_64-nilrt-linux-g++.exe --sysroot=C:/build/9.2/x64/sysroots/core2-64-nilrt-linux -O2 -pipe -g -feliminate-unused-debug-types -g -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed CMakeFiles/DCPower.dir/C_/Users/e443988/Documents/DTS-SITU/DCPower/src/NI_DCPowerSupply_Driver.cpp.o -o bin\DCPower "C:/Program Files (x86)/National Instruments/Shared/ExternalCompilerSupport/C/lib64/msvc/NIDAQmx.lib" "C:/Program Files (x86)/IVI Foundation/IVI/Lib_x64/msc/niswitch.lib" "C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib" && cd ."
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3608): undefined reference to `__imp_WaitForSingleObject'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3613): undefined reference to `__imp_GetCurrentProcessId'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x364e): undefined reference to `__imp_CreateMutexA'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3666): undefined reference to `__imp_WaitForSingleObject'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3679): undefined reference to `__imp_ReleaseMutex'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3682): undefined reference to `__imp_CloseHandle'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3692): undefined reference to `__imp_WaitForSingleObject'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x36bb): undefined reference to `__imp_ReleaseMutex'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x36d3): undefined reference to `__imp_LoadLibraryA'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x36ec): undefined reference to `__imp_ReleaseMutex'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x371a): undefined reference to `__imp_ReleaseMutex'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3732): undefined reference to `__imp_FreeLibrary'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3754): undefined reference to `__imp_ReleaseMutex'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x3784): undefined reference to `__imp_GetProcAddress'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x379f): undefined reference to `__imp_GetProcAddress'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x37ba): undefined reference to `__imp_GetProcAddress'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x37d5): undefined reference to `__imp_GetProcAddress'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x37f0): undefined reference to `__imp_GetProcAddress'
c:/build/9.2/x64/sysroots/x86_64-w64-mingw32/usr/bin/x86_64-nilrt-linux/../../libexec/x86_64-nilrt-linux/gcc/x86_64-nilrt-linux/10.3.0/real-ld.exe: C:/Program Files/IVI Foundation/IVI/Lib_x64/msc/nidcpower.lib(objects/win64U/x64/msvc14/release/msvc/glu32.obj):(.text$mn+0x380b): more undefined references to `__imp_GetProcAddress' follow
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
* The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command ninja" terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.