hxcpp icon indicating copy to clipboard operation
hxcpp copied to clipboard

Using compile cache can break linking certain library builds

Open tobil4sk opened this issue 11 months ago • 1 comments

When compiling a Build.xml like this, the build fails on mac while linking the default target with HXCPP_COMPILE_CACHE enabled:

<xml>
	<files id="lib">
		<cache value="true" asLibrary="true" />
		<file name="lib.c" />
	</files>

	<target id="default" output="lib${DBG}" tool="linker" toolid="static_link">
		<files id="lib" />
	</target>
</xml>
fatal error: /Applications/Xcode_15.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file list file: obj/darwin64/all_objs is empty

The problem is that the lib files are cached by hxcpp in a static library, and apart from that there are no object files. This means there is an empty all_objs file generated, which libtool doesn't seem to like. On other platforms (with different static linking tools) this is not an issue.

tobil4sk avatar Jan 23 '25 16:01 tobil4sk

Similarly, this example breaks dynamic library builds with the compile cache on windows:

<xml>

	<files id="lib">
		<cache value="true" asLibrary="true" />
		<file name="lib.c" />
	</files>

	<target id="default" output="lib${DBG}" tool="linker" toolid="dll">
		<files id="lib" />
	</target>

</xml>
Link: lib.dll
LINK : warning LNK4001: no object files specified; libraries used
LINK : error LNK2001: unresolved external symbol _DllMainCRTStartup
obj\lib\lib.dll : fatal error LNK1120: 1 unresolved externals

#1184 will solve the LNK4001 warning as well as the mac libtool error. However, for the dll linking problem, I'm not sure what the solution would be.

tobil4sk avatar Jan 31 '25 02:01 tobil4sk