Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Yuandong_W_Intel
Employee
244 Views

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

0 Kudos
13 Replies
Viet_H_Intel
Moderator
244 Views

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

Yuandong_W_Intel
Employee
244 Views

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

Viet_H_Intel
Moderator
244 Views

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

Yuandong_W_Intel
Employee
244 Views

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

Viet_H_Intel
Moderator
244 Views

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

Yuandong_W_Intel
Employee
244 Views

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.

 

Viet_H_Intel
Moderator
244 Views

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 

Yuandong_W_Intel
Employee
244 Views

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?

Viet_H_Intel
Moderator
244 Views

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

Yuandong_W_Intel
Employee
244 Views

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?

Viet_H_Intel
Moderator
244 Views

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

Yuandong_W_Intel
Employee
244 Views

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

Viet_H_Intel
Moderator
244 Views

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. 

Reply