neverwinter.nim icon indicating copy to clipboard operation
neverwinter.nim copied to clipboard

nwn_script_comp: Issues building on Windows 10 and not picking up $NWN_ROOT and $NWN_HOME environment variables on WSL2

Open zeroark opened this issue 1 year ago • 2 comments

It is most likely related to my specific setup, not the code itself, so I'm sorry if it is unrelated.

Environment

  • Windows 10 Professional
  • Nim 2.0.4 (Installed using Chocolatey)
  • Ubuntu 18.04.6 (WSL2)

Steps to Reproduce

  • Clone repo, checkout master branch.
  • Build the project using nimble build -d:release

Expected Result

All the neverwinter.nim binaries should build successfully

Actual Result

All binaries build correctly, except nwn_script_comp. See the attached logs:

   Building neverwinter/nwn_resman_extract.exe using c backend
   Building neverwinter/nwn_net.exe using c backend
   Building neverwinter/nwn_resman_stats.exe using c backend
   Building neverwinter/nwn_asm.exe using c backend
   Building neverwinter/nwn_gff.exe using c backend
   Building neverwinter/nwn_script_comp.exe using c backend
D:\Workspace\nwn-workspace\neverwinter.nim\nwn_script_comp.nim(1, 21) Warning: use the nimble packages `malebolgia`, `taskpools` or `weave` instead; threadpool is deprecated [Deprecated]
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(ios-inst.o):(.text$_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E[_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E]+0x0): multiple definition of `std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005354.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(ios.o):(.text$_ZNSt8ios_baseC2Ev+0x0): multiple definition of `std::ios_base::ios_base()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005262.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(ios.o):(.text$_ZNSt8ios_baseD2Ev+0x0): multiple definition of `std::ios_base::~ios_base()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005265.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(sstream-inst.o):(.text$_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev[_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev]+0x0): multiple definition of `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005005.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(string-inst.o):(.text$_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERyy[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERyy]+0x0): multiple definition of `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long long&, unsigned long long)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004537.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(string-inst.o):(.text$_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv]+0x0): multiple definition of `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004434.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(string-inst.o):(.text$_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4_]+0x0): multiple definition of `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004536.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(string-inst.o):(.text$_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEyyPKcy[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEyyPKcy]+0x0): multiple definition of `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long long, unsigned long long, char const*, unsigned long long)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004435.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(string-inst.o):(.text$_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcyy[_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcyy]+0x0): multiple definition of `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned long long, unsigned long long) const'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d001079.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(eh_personality.o):(.text$__gxx_personality_seh0+0x0): multiple definition of `__gxx_personality_seh0'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006855.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(eh_throw.o):(.text$__cxa_rethrow+0x0): multiple definition of `__cxa_rethrow'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006836.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(locale.o):(.text$_ZNSt6localeD2Ev+0x0): multiple definition of `std::locale::~locale()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004369.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(locale_init.o):(.text$_ZNSt6localeC2Ev+0x0): multiple definition of `std::locale::locale()'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d004362.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(functexcept.o):(.text.unlikely._ZSt20__throw_length_errorPKc+0x0): multiple definition of `std::__throw_length_error(char const*)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005553.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(functexcept.o):(.text$_ZSt24__throw_out_of_range_fmtPKcz+0x0): multiple definition of `std::__throw_out_of_range_fmt(char const*, ...)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005575.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(ostream-inst.o):(.text$_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_x[_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_x]+0x0): multiple definition of `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long long)'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d005520.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(eh_catch.o):(.text$__cxa_begin_catch+0x0): multiple definition of `__cxa_begin_catch'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006819.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(eh_catch.o):(.text$__cxa_end_catch+0x0): multiple definition of `__cxa_end_catch'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006825.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(guard.o):(.text$__cxa_guard_acquire+0x0): multiple definition of `__cxa_guard_acquire'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006832.o):(.text+0x0): first defined here
C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0\libstdc++.a(guard.o):(.text$__cxa_guard_release+0x0): multiple definition of `__cxa_guard_release'; C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/libstdc++.dll.a(libstdc___6_dll_d006833.o):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Error: execution of an external program failed: 'g++.exe  @nwn_script_comp_linkerArgs.txt'
       Tip: 7 messages have been suppressed, use --verbose to show them.
nimble.nim(229)          buildFromDir

Notes

  • I made a second attempt adding the nimble install -y --depsOnly and nimble setup just as in the Github Actions. No success.
  • For testing purposes, I attempted to build this from WSL2 and it works without issues. This solution works but, for whatever reason, it's not picking the NWN_HOME and NWN_ROOT environment variables I manually set after building so I have to always manually use --root and --userDirectory
zeroark@Zeroark % nwn_script_comp test.nss                                                                        ~
shared.nim(112)          :anonymous
game.nim(83)             findNwnRoot
Error: unhandled exception: Could not locate NWN; try --root [ValueError]
zeroark@Zeroark [1] %                                                                                             ~
zeroark@Zeroark [1] % nwn_script_comp --root /mnt/e/Program\ Files\ \(x86\)/Steam/steamapps/common/Neverwinter\ Nights --userdirectory /mnt/c/Users/Usuario/Documents/Neverwinter\ Nights test.nss
W [2024-06-19T22:33:34]   key not found, skipping: /mnt/e/Program Files (x86)/Steam/steamapps/common/Neverwinter Nights/data/nwn_retail.key
I [2024-06-19T22:33:34] 1 successful, 0 skipped, 0 errored
zeroark@Zeroark %                                                                                                 ~
zeroark@Zeroark % 

I haven't tried using prebuilt binaries yet (Probably will be most likely solution) but just wanted to know if anybody stumbled upon any of the above issues, or if it's just me.

Once again, I appreciate any help on any of the above issues. Thanks!

zeroark avatar Jun 20 '24 03:06 zeroark

For the nsc compilation issue, have you tried adding the -d:mingw flag to you nim c command?

tinygiant98 avatar Aug 21 '24 04:08 tinygiant98

Hello @tinygiant98, I ran nimble build -d:mingw in the console and it seems it worked this time. The only issue I found was it that took much longer than usual, but apart from that everything worked just fine.

Tested compiling a simple script, but the Environment Variables issue persists as follows:

image

Everything works just fine If i use the --root flag, but if not it will always drop the same error even if the Environment Variable is present.

zeroark avatar Aug 23 '24 03:08 zeroark

Sorry for the late reply. Looks like --root isn't working because it appears that that nsc is looking for the game on windows with a hardcoded c:\ directory. Yours is E. You can get around this by setting an environmental variables called NWN_ROOT to your game's install.

tinygiant98 avatar Oct 10 '24 00:10 tinygiant98

Hello @tinygiant98, Looks like NWN_ROOT worked. Weird that NWN_HOME didn't. This has effectively solved my issue. Thanks again!

image

zeroark avatar Oct 11 '24 04:10 zeroark