首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用i 686-w64-mingw32-g++编译Chaiscript失败

用i 686-w64-mingw32-g++编译Chaiscript失败
EN

Stack Overflow用户
提问于 2021-09-29 00:32:45
回答 2查看 183关注 0票数 1

我正在尝试使用i 686-W64-mingw32-g++编译器为Linux窗口编译一个简单的chaiscript示例。我已经让它与g++一起工作,但是当使用命令编译我的应用程序时

代码语言:javascript
复制
i686-w64-mingw32-g++ ./main.cpp -pthread -L/lib/x86_64-linux-gnu/libdl.a -std=c++17

以下是main.cpp的内容

代码语言:javascript
复制
#include "chaiscript/chaiscript.hpp"
#include "chaiscript/chaiscript_stdlib.hpp"

int main()
{
  chaiscript::ChaiScript chai;

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

这就是它给我的错误

如何修复此错误,以便编译代码?

编辑:

通过使用x86_64-w64-mingw32-g++而不是i 686-W64-mingw32-g++,我能够取得更好的进展,但现在我得到了以下错误:

代码语言:javascript
复制
/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
EN

回答 2

Stack Overflow用户

发布于 2021-09-29 14:17:23

下面是使用cmake的解决方案:

首先创建一个工具链文件:

代码语言:javascript
复制
# 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)

下一步是使实际的CMakeLists.txt:

代码语言:javascript
复制
# 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()

之后,运行以下命令来生成:

代码语言:javascript
复制
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchainfile.cmake
cmake --build .

现在您应该有一个可工作的exe文件,用于chaiscript。

票数 1
EN

Stack Overflow用户

发布于 2021-09-29 00:37:48

看来你首先需要#include <mutex>。也许你也需要别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69369787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档