Intel® C++ Compiler
Support and discussions for creating C++ code that runs on platforms based on Intel® processors.
7692 Discussions

Warning about feupdateenv is not implemented

errorcode
Beginner
812 Views

I am getting the following warning during linking on RHEL 4.7:

/opt/intel/Compiler/11.0/074/lib/intel64/libimf.so: warning: warning: feupdateenv is not implemented and will always fail

I suspect it has something to do with the math library, but I'm not sure. Has anyone seen this before?

Thanks,
QN

0 Kudos
5 Replies
TimP
Black Belt
812 Views
Quoting - errorcode

/opt/intel/Compiler/11.0/074/lib/intel64/libimf.so: warning: warning: feupdateenv is not implemented and will always fail

I suspect it has something to do with the math library, but I'm not sure. Has anyone seen this before?

Yes, this has been brought up before, but the forum search seems not to be helpful. I believe it means about what it says, that if you use this function from , the function will not have any effect, i.e. C99 is not fully implemented, even when you set std=c99.
Tim_Theisen
Beginner
812 Views
I had this problem in the past. The problem is the you are linking against the Intel math library only. The Intel math library (libimf) has optimized replacements for many of the routines in the system math library (libm). However, the Intel math library does not provide replacements for all functions.

The solution is simple. Always link against both math libraries: libimf libm

...Tim
errorcode
Beginner
812 Views
Quoting - Tim Theisen
I had this problem in the past. The problem is the you are linking against the Intel math library only. The Intel math library (libimf) has optimized replacements for many of the routines in the system math library (libm). However, the Intel math library does not provide replacements for all functions.

The solution is simple. Always link against both math libraries: libimf libm

...Tim

Thanks - that explains it.

Is there a way to tell the compiler/linker to only use libm and not libimf or any other Intel libraries such as libsvml and libintlc?
TimP
Black Belt
812 Views
Quoting - errorcode
Is there a way to tell the compiler/linker to only use libm and not libimf or any other Intel libraries such as libsvml and libintlc?
In the help menu of the current compilers, it says that -fp-model strict will enable fenv access. This also will remove most implicit usage of svml. -O1 (no vectorization) also would avoid svml. For 11.0, there is supposed to be a separate option to prevent svml and allow vectorization, but I don't find it in the docs.
If you wish to make sure of using the functions, you might find it useful to use gcc/g++ for those.
John_O_Intel
Employee
812 Views
Quoting - errorcode
Is there a way to tell the compiler/linker to only use libm and not libimf or any other Intel libraries such as libsvml and libintlc?
You can use -dryrun option to see what libs icc/icpc/ifort are passing to ld , using dryrun doesn't run the commands it just lists them. You can experiment with using -nostdlib and/or -nodefaultlibs options, when you use these you must add the libraries and commands listed in the -dryrun output, then you can experiment with removing certain libs. Using the compiler in this way isn't supported, and the compiler hasn't been validated using this. Is there a reason you want to remove certain libraries? For instance, the compiler vectorizer makes calls into libsvml, so not linking with svml can result in link error with missing symbols.

Good luck & best regards,
JohnO
Reply