linker error using icc19.4

linker error using icc19.4

Hi all,

I'm using icc19.4 (gcc 8.3 compatibility) on Ubuntu18.10 to build a huge project.

The build process halts throwing the following errors.

**********************************************

ld: cannot find none: No such file or directory

FATAL ERROR: ld partial link command failed
icc: error #10014: problem during multi-file optimization compilation (code 1)

***********************************************

It seems that the linker cannot find something (some files? some symbols?)

but it doesn't point out what is missing.

So is there any help about how to find the root cause? And what is the meaning of this error?

Thanks!

 

Regards
yuandong

14 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

That message related to ipo. Can you check to see if -ipo being used?

Thank you Hoang,

I check the makefile and find it used -ipo1 flag indeed.

If this option is removed, the build process can pass.

 

IPO feature is only used for release mode, but I know little about it (it's a legacy for me).

Is there any negative effect if I disable IPO feature for my project?

 

Regards

Yuandong

Depends on your project, you may see some performance impact.

Ok, Hoang.

We tend to continue to use the IPO feature.

I have known IPO is an automatic optimization provided by the compiler.

But I still don't know why this problem occurs and what's the real meaning of the error output.

So is there any suggestions about how to fix this problem when the flag -ipo is enabled?

BTW, we use icc16.0 before and there is no this problem, but it is raised after we upgrade our toolchain to icc19.4.

 

Thanks & Regards

Yuandong

Can you check if -ipo also in the link line?

No, there is no -ipo option in the link line.

I have tried if the option is added to link line, the build process also failed with the same error.

But before the error, it also throws many the following warning:

ipo: warning #11003: No IR in object file xxx; was the source file compiled with -ipo?

 

But -ipo option in the compile line is used indeed.

 

Can you add -ipo to the link line?

For the warning #11003 seems like some/many objects were not compiled with -ipo flags. What you can do to verify is to add -sox to your command line options. Then pick an object which gave you a warning above and

"strings -a abc.o >& abc.out" then "vim abc.out" search for -ipo 

ok, Hoang.

I have picked up the object can't be compiled with -ipo.

Because when compile it with IPO, it gives the following error:

icc: command line error: multiple sources not allowed with -o option

 

I assume -o option is used to specify the output file name.

Why does the compiler complain it illegal?

You must have more than one source files per compilation unit. (i.e. icc foo.c bar.c -c -o foo_bar.o)

Thank you, Hoang.

I have already more than one source files when compile them with -ipo1 option.

The compile process failed at there and gave "icc: command line error: multiple sources not allowed with -o option".

But when I remove -o option (which I use to specify the name of the output file),

the compile process can pass and the output file use the default name (source_file_name.o).

It's strange: can not use -o option when using IPO feature?

You are able to use -o to name your output file with -ipo. Not really sure what going on in your Env.

Ok, Hoang. Thanks for your update.
Now I have the following two questions about IPO feature.
(1) I found that only a part of objects in my project are compiled with IPO.
And there are no IPO option in the linker lines. All the objects can be linked under the environment with icc16.0.
Should I compile all the objects if I want to use IPO with icc19.4?
Is the object compiled with IPO able to linked with that done with non-IPO?
(2) There are many source files in assembly language in my project.
They are not processed with any IPO flags.
Are the source files in assembly language (.ASM) able to use IPO feature?
If they are, how to deal with them?

Yuandong

You can link objects compile with and without -ipo.

If you have inline assembly, then the code gen will be generated the way it has written. So, I don't think ipo will have any affect on inline assembly at all. 

Leave a Comment

Please sign in to add a comment. Not a member? Join today