-->

Linking fails [ilink32 Error] Fatal: Unable to ope

2020-08-09 07:14发布

问题:

I have been updating code fomr an old legacy project build using C++ Builder 2010 to compile with C++ Builder 10 Seattle. I have mostly had to change paths, a lot of dupIgnore to TDuplicates::dupIgnore, reimport some components like MSXML and MSMQ etc.

First for a bunch of subprojects that the main project uses in the form of bpl's and dll's and finally the code of the main project compiles.

But... it fails a linking :P

[ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ'

I have tried to find info about potential issues and many mention making sure System is supplied in the Unit Scope under the Delphi Compiler settings. But that is already present for this project. What else could be causing this?

For information. Compiled using "classic" bcc32 compiler for now.

Include Path:

$(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\dinkumware;

Library Path:

$(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk;

回答1:

I think you should find string TYPES.OBJ in all files in your project, after you need remove this string from found files. Before this do not forget to make a backup project directory.

I had a similar problem when I convert old project from BCB5 to BCB 6. When I deleted the string with ".obj" filename from project file with ".bpr" extension my problem was solved.

String in Project1.bpr project file was like:

<OBJFILES value="Unit1.obj Types.obj"/>

after modification:

<OBJFILES value="Unit1.obj"/>


回答2:

I think you should find string TYPES.OBJ in all files in your project, after you need remove this string from found files. Before this do not forget to make a backup project directory.

I had a similar problem when I convert old project from BCB5 to BCB 6. When I deleted the string with ".obj" filename from project file with ".bpr" extension my problem was solved.

String in Project1.bpr project file was like: after modification:



回答3:

I would follow the advice given by Tim D first. Whenever I start using a newer version of a compiler 90% of of importing old projects is due to me directly including code/header/object files and creating a blank version then copying over afterwards 99% of the time fixes it.

After making sure the data was created fresh, then importing your old data over it, I would check for legacy incompatibility issues. You are on the right path with changing your "lists". I also recommend you make sure that all your code is rewritten for the new compiler in mind. This helps with both code compatibility and streamlining for running the finished project.

Lastly, I would check that all your extra data (files that aren't pure code such as header files) are still recognizable too the compiler currently being used. (Legacy can cause this to be finicky.)



回答4:

Looks like the compiler is getting TYPES.OBJ but not able to open as which may happen due to multiple factors(like C++ is platform dependent.. TYPES.cpp might be build in different OS) You can for sure resolve the problem my building TYPES.cpp.. Also be aware the libs this CPP is importing should be compateble even// If you still get the error please go ahead with full build.. Or check link.rsp or use nm command to find dependent oblect and build all of them.