Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

linker error using icc19.4

Yuandong_W_Intel
Employee
1,501 Views

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
1,501 Views

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

0 Kudos
Yuandong_W_Intel
Employee
1,501 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

0 Kudos
Viet_H_Intel
Moderator
1,501 Views

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

0 Kudos
Yuandong_W_Intel
Employee
1,501 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

0 Kudos
Viet_H_Intel
Moderator
1,501 Views

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

0 Kudos
Yuandong_W_Intel
Employee
1,501 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.

 

0 Kudos
Viet_H_Intel
Moderator
1,501 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 

0 Kudos
Yuandong_W_Intel
Employee
1,501 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?

0 Kudos
Viet_H_Intel
Moderator
1,501 Views

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

0 Kudos
Yuandong_W_Intel
Employee
1,501 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?

0 Kudos
Viet_H_Intel
Moderator
1,501 Views

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

0 Kudos
Yuandong_W_Intel
Employee
1,501 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

0 Kudos
Viet_H_Intel
Moderator
1,501 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. 

0 Kudos
Reply