Home > Software design >  Compiling Chaiscript with i686-w64-mingw32-g fails
Compiling Chaiscript with i686-w64-mingw32-g fails

Time:09-29

I am trying to compile a simple chaiscript example for windows from Linux using the i686-w64-mingw32-g compiler. I have already gotten it to work with g , but when compiling my app using the command

i686-w64-mingw32-g   ./main.cpp -pthread -L/lib/x86_64-linux-gnu/libdl.a -std=c  17

And here are the contents of main.cpp

#include "chaiscript/chaiscript.hpp"
#include "chaiscript/chaiscript_stdlib.hpp"

int main()
{
  chaiscript::ChaiScript chai;

  chai.eval(R"(puts("Hello"))");
}

This is the error it gives me

How do I fix this error so I can compile my code?


Edit:
I was able to get farther along by using x86_64-w64-mingw32-g instead of i686-w64-mingw32-g , but now I am getting this error:
/usr/bin/x86_64-w64-mingw32-as: /tmp/ccE1ZcKe.o: too many sections (73147)
/tmp/ccwlaMBb.s: Assembler messages:
/tmp/ccwlaMBb.s: Fatal error: can't write 41 bytes to section .text of /tmp/ccE1ZcKe.o: 'file too big'
/usr/bin/x86_64-w64-mingw32-as: /tmp/ccE1ZcKe.o: too many sections (73147)
/tmp/ccwlaMBb.s: Fatal error: can't close /tmp/ccE1ZcKe.o: file too big

CodePudding user response:

Looks like you need #include <mutex> first. Perhaps you will need others, too.

CodePudding user response:

Here is the solution using cmake:

First make a toolchain file:

# the name of the target operating system
set(CMAKE_SYSTEM_NAME Windows)

 

# which compilers to use
set(CMAKE_C_COMPILER x86_64-w64-mingw32-g  )
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g  )

set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)


# adjust the default behavior of the find commands:
# search headers and libraries in the target environment
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

 

# search programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

The next step is to make the actual CMakeLists.txt:
# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

# project name and language
project(HelloWorld LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

 

include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

# define executable and its source file
add_executable(HelloWorld main.cpp)

if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
  add_definitions(-O3)
  SET(CMAKE_CXX_FLAGS  "-pthread -Wa,-mbig-obj -static -std=c  17")
  target_link_libraries(HelloWorld PUBLIC "-L/lib/x86_64-linux-gnu/libdl.a")
endif()

after, run the following commands to build:
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchainfile.cmake
cmake --build .

And you should now have a working exe file for chaiscript
  • Related