C++ Plugin module failed to load when there circular module reference

After upgrading to UE4.14 my custom plugin failed to load after successful compile. This wasn’t a problem in versions before.
Has anything changed plugin related changed since the last update?

115996-error.png

I pretty much tried everything but I cannot figure out the problem.

I have same problem with 4.14.0. The module was compiled successfully but not loaded by unknown reason.

[2016.11.23-09.26.47:357][ 0]LogModuleManager:Warning: ModuleManager: Unable to load module ‘E:/UE4VoxelTerrain/UE4VoxelTerrain/Binaries/Win64/UE4Editor-UE4VoxelTerrain.dll’ because the file couldn’t be loaded by the OS.

The module works correctly with 4.13.2

I reverted back to UE 4.13. I have no idea what else to change

I have changed Build.cs (move dependencies from Private section to Public). Clean Binaries and Intermediate dir. And now it works.

This is my commit on github (may be it can help) migrate to 4.14.0 · bw2012/UnrealSandboxTerrain@f8805ce · GitHub

Do you maybe got more then one module? do they maybe circule refrence to eachother? because i had same issue and i needed to twist code a bit so they don’t refrence eachgother in both directions

I do have a circular dependency with other modules and there is no that I can fix that without a major refactor…

So that the reason, recently i discover circular refrence config in build script is descibed to be for legecy only (in engine code) and new modules should not use it. I will move this to bug raports, because even if circular module references are impossible now we should get at least error message about it during compilation. i will also change title a bit so it addresses the true problem, hope you dont mind

i don’t mind. I just want to have an easy fix for the problem…
No idea how to solve this by the way. I have to redesign huge parts of my plugin.

            // need to add this dependency because ConversationNodes are using graph classes
            if (UEBuildConfiguration.bBuildEditor == true)
            {
                PublicDependencyModuleNames.AddRange(
                new string[] {
                        "ConversationEditor",
                        "UnrealEd"
                }
                );

                CircularlyReferencedDependentModules.AddRange(
                new string[] {
                        "ConversationEditor",
                }
                );
            }

I have this bit of code in my build script

Hi MatzeOGH,

There were some changes with regards to plugins in 4.14. One of the changes caused an issue that seems to be similar to what you are describing. If a project from 4.13 (or presumably earlier versions as well), was upgraded to 4.14, plugins in the project were not being enabled as they were in the previous version (reported in UE-38953). If you open the .uplugin file for your plugin, there will most likely be a setting that says "EnabledByDefault"= false,. If you change that to true, does it allow your project to open successfully?

Hi ,

Thanks for the tip. “EnabledByDefault” was in fact set to false but changing it to true did not resolve the problem.
I’m currently rewriting the plugin so it’s not really a problem any more.
Btw. I can send you the plugin if you like. Not for fixing my code but maybe it helps to figure out what causes these kinds of problems.

You could also try enabling the plugin in your project’s .uproject file. Open the .uproject file to edit it (using Visual Studio or Notepad++), and after the Modules section, add a Plugins section that looks something like this:

"Plugins": 
[
        {
            "Name": "MyPlugin",
            "Enabled": true
        },
]

The key here is that in 4.14, any plugins that are dependencies of your project must be enabled specifically. Previously they were automatically enabled if they were a dependency of the project. I am not sure yet if this change was intentional or not. You had previously mentioned that there is a circular dependency in your case as well, and there is a possibility that may be interfering as well.

Give the code I mentioned above a try. If that does not help, I can try to take a closer look at your plugin.