I have Angelscript compiling in on Windows, but am trying to develop on Linux. I have copied the Angelscript files into the project, just as I did on Windows, but when compiling the project I am now getting an error of:
LogCore: Warning: dlopen failed: Unreal Projects/GameEssentials/Binaries/Linux/libUE4Editor-GameEssentials.so: undefined symbol: asAllocMem
LogModuleManager: Warning: ModuleManager: Unable to load module 'Unreal Projects/GameEssentials/Binaries/Linux/libUE4Editor-GameEssentials.so' because the file couldn't be loaded by the OS.
Upon investigation, I found this stackoverflow answer with a similar issue:
I believe this could be the same issue, since Angelscript has this block for the asAllocMem:
#ifndef ANGELSCRIPT_DLL_MANUAL_IMPORT extern "C" { // Engine AS_API asIScriptEngine *asCreateScriptEngine(asDWORD version = ANGELSCRIPT_VERSION); AS_API const char *asGetLibraryVersion(); AS_API const char *asGetLibraryOptions(); // Context AS_API asIScriptContext *asGetActiveContext(); // Thread support AS_API int asPrepareMultithread(asIThreadManager *externalMgr = 0); AS_API void asUnprepareMultithread(); AS_API asIThreadManager *asGetThreadManager(); AS_API void asAcquireExclusiveLock(); AS_API void asReleaseExclusiveLock(); AS_API void asAcquireSharedLock(); AS_API void asReleaseSharedLock(); AS_API int asAtomicInc(int &value); AS_API int asAtomicDec(int &value); AS_API int asThreadCleanup(); // Memory management AS_API int asSetGlobalMemoryFunctions(asALLOCFUNC_t allocFunc, asFREEFUNC_t freeFunc); AS_API int asResetGlobalMemoryFunctions(); AS_API void *asAllocMem(size_t size); AS_API void asFreeMem(void *mem); // Auxiliary AS_API asILockableSharedBool *asCreateLockableSharedBool(); } #endif // ANGELSCRIPT_DLL_MANUAL_IMPORT
That would be fixed by adding an -rdynamic
option to the linker, but I haven’t been able to find out how to do that with the UBT. So the question is, how do I add -rdynamic
to the linker options for UBT?