
Issue #19612 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Feedback I suspect the `CC` is different from the compiler used to build the ruby. ---------------------------------------- Bug #19612: Embed error https://bugs.ruby-lang.org/issues/19612#change-102869 * Author: hdiwan415 (Hasan Diwan) * Status: Feedback * Priority: Normal * ruby -v: ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- Makefile: ```makefile INC_DIRS=$(HOME)/.rvm/rubies/ruby-3.2.0/include/ruby/ LIB=$(HOME)/.rvm/rubies/ruby-3.2.0/lib/ # Thanks to Job Vranish (https://spin.atomicobject.com/2016/08/26/makefile-c-projects/) TARGET_EXEC := dotiw BUILD_DIR := ./build SRC_DIRS := . # Find all the C and C++ files we want to compile # Note the single quotes around the * expressions. The shell will incorrectly expand these otherwise, but we want to send the * directly to the find command. SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s') # Prepends BUILD_DIR and appends .o to every src file # As an example, ./your_dir/hello.cpp turns into ./build/./your_dir/hello.cpp.o OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) # String substitution (suffix version without %). # As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d DEPS := $(OBJS:.o=.d) # Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag INC_FLAGS := $(addprefix -I,$(INC_DIRS)) # The -MMD and -MP flags together generate Makefiles for us! # These files will have .d instead of .o as the output. CPPFLAGS := $(INC_FLAGS) -MMD -MP # The final build step. $(BUILD_DIR)/$(TARGET_EXEC): $(OBJS) $(CC) $(OBJS) -o $@ $(LDFLAGS) $(LIB) -lruby # Build step for C source $(BUILD_DIR)/%.c.o: %.c mkdir -p $(dir $@) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ # Build step for C++ source $(BUILD_DIR)/%.cpp.o: %.cpp mkdir -p $(dir $@) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ .PHONY: clean clean: rm -r $(BUILD_DIR) # Include the .d makefiles. The - at the front suppresses the errors of missing # Makefiles. Initially, all the .d files will be missing, and we don't want those # errors to show up. -include $(DEPS) ``` dotiw.c: ```C #include "ruby.h" int main(int argc, char* argv[]) { int state = 0; /* construct the VM */ ruby_init(); ruby_script(argv[0]); ruby_init_loadpath(); void* node = ruby_options(2, "puts \"hello world!\""); if (ruby_executable_node(node, &state)) { state = ruby_exec_node(node); } if (state) { /* handle exception, perhaps */ } return ruby_cleanup(state); } ``` Finally, a compile log: I saw "If you encounter this message, can you file a bug report?"" here's my bug report. ---Files-------------------------------- compile.log (40.6 KB) -- https://bugs.ruby-lang.org/