View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0012575CMakeCMakepublic2011-11-11 18:552011-11-13 21:47
ReporterDavid Bjornbak 
Assigned ToBill Hoffman 
PrioritynormalSeveritymajorReproducibilityalways
StatusclosedResolutionno change required 
PlatformLinux OSRedhat OS Version4.9
Product VersionCMake 2.8.6 
Target VersionFixed in Version 
Summary0012575: I'm getting a Link error on Linux when I use CMake 2.8.6 or 2.8.5. If use CMake 2.6.3, with the exact same configuration, the l
DescriptionI'm getting a Link error on Linux when I use CMake 2.8.6 or 2.8.5. If use CMake 2.6.3, with the exact same configuration, the link works.

I did a diff on the build.make from 2.8.6 and 2.6.3 and found when I use cmake 2.8.6 On Linux adding headers to ..._EXTERNAL_OBJECTS for executables under the build.make.

The following is the link error I get, it looks for a header but, the link.txt does need it and the diff on build.make that looks like is causing this.

Link Error Message


nux_x86_64/lib/libeemdump.so /hped/builds/tools/google-breakpad/784/lib.linux_x86_64/release/libbreakpad.a /hped/builds/tools/google-breakpad/78
4/lib.linux_x86_64/release/libbreakpad_client.a /hped/builds/tools/google-breakpad/784/lib.linux_x86_64/release/libbreakpad_server.a /gfs/sr/blu efin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/libplugin_manager.so /hped/builds/tools/qt/4.7.4/linux_x86_6
4/lib/libQtCore.so /hped/builds/tools/cryptopp/5.6.0_0/linux_x86_64/release/libcryptopp.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64
/release/libboost_date_time.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_filesystem.a /hped/builds/tools/boost/boos t_1_45_0/lib.linux_x86_64/release/libboost_program_options.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_system.a /h ped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_thread.a /hped/builds/tools/stl/5.2.1/lib.linux_x86_64/libstlport_gcc.so - Wl,-rpath,/hped/builds/tools/qt/4.7.4/linux_x86_64/lib:/hped/builds/tools/stl/5.2.1/lib.linux_x86_64:/gfs/sr/bluefin/d1/build/hped/builds/sr/dev
XXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib:/release:
msgs_eesofpvm_multitool.h:4:19: fatal error: Diag.h: No such file or directory compilation terminated.
make[3]: *** [/gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool] Error 1
make[3]: Leaving directory `/hfs/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease'
make[2]: *** [projects/simsys/source/eesofpvm_multitool/CMakeFiles/eesofpvm_multitool.dir/all] Error 2


Diff with the build.make file, notice the file msgs_eesofpvm_multitool.h


< eesofpvm_multitool_EXTERNAL_OBJECTS =
---
> eesofpvm_multitool_EXTERNAL_OBJECTS = \
> "/hfs/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/projects/simsys/source/eesofpvm_multitool/msgs_eesofpvm_multitool.h"
498d482
< /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool: /hped/builds/tools/qt/4.7.4 /linux_x86_64/lib/libQtCLucene.so
500,502d483
< /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool: /usr/X11R6/lib64/libXext.so < /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool: /usr/X11R6/lib64/libX11.so < /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool: /usr/lib64/libm.so
519a501
> /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bit
> release/linux_x86_64/bin/eesofpvm_multitool:
> projects/simsys/source/eeso
fpvm_multitool/msgs_eesofpvm_multitool.h


Attached is the diff under the CMakefiles area between 2.6.3 and 2.8.6
TagsNo tags attached.
Attached Fileslog file icon diff.log [^] (12,430 bytes) 2011-11-11 18:55
txt file icon CMakeLists.txt [^] (1,140 bytes) 2011-11-12 12:40 [Show Content]

- Relationships Relation Graph ] Dependency Graph ]

-  Notes
(0027789)
Bill Hoffman (manager)
2011-11-12 11:13

Some how CMake things that fpvm_multitool/msgs_eesofpvm_multitool.h is an external object file, and is trying to link it. Where does that file show up in the CMakeLists.txt files?
(0027790)
David Bjornbak (reporter)
2011-11-12 12:40

Attached is the CMakeLiss files in question and the header msgs_eesofpvm_multitool.h is listed under the add_executable dependency
(0027791)
David Bjornbak (reporter)
2011-11-12 13:04
edited on: 2011-11-12 13:06

Bill stated "You need to run make VERBOSE=1 for both and see what the difference is in the command line that is being produced. From the error it looks like a -I flag is missing from one of them. Please post the results of make VERBOSE=1. "

This is a link time error and the use of -I is not relevant unless you're compiling a *.cxx file at link time. This project is not trying to compile *.cxx files and this project has been working for the last 2 yours under CMake 2.6.3

The shown below, the link line make VERBOSE=1 output is from the "good" or working link command form CMake 2.6.3, there's no -I in the command:



/hped/builds/tools/gcc/4.6.1/bin/g++ -fPIC -pipe -m32 -g -DDEBUG -D_DEBUG -DQT_DEBUG -fPIC CMakeFiles/eesofpvm_multitool.dir/addhost.cpp.o
CMakeFiles/eesofpvm_multitool.dir/copy.cpp.o CMakeFiles/eesofpvm_multitool.dir/cti_permuter_ds_creator.cpp.o CMakeFiles/eesofpvm_multitool.dir/d
ataset_updater.cpp.o CMakeFiles/eesofpvm_multitool.dir/mkdir.cpp.o CMakeFiles/eesofpvm_multitool.dir/mom_mesh_installer.cpp.o CMakeFiles/eesofpv
m_multitool.dir/move.cpp.o CMakeFiles/eesofpvm_multitool.dir/multitool.cpp.o CMakeFiles/eesofpvm_multitool.dir/remote_file_updater.cpp.o CMakeFi
les/eesofpvm_multitool.dir/remove.cpp.o CMakeFiles/eesofpvm_multitool.dir/rmdir.cpp.o CMakeFiles/eesofpvm_multitool.dir/rsync.cpp.o CMakeFiles/e
esofpvm_multitool.dir/simdir_manager.cpp.o CMakeFiles/eesofpvm_multitool.dir/spawn_child.cpp.o CMakeFiles/eesofpvm_multitool.dir/spawn_pipe_exte
nsion.cpp.o CMakeFiles/eesofpvm_multitool.dir/msgs_eesofpvm_multitool.c.o -o ../../../../linux_x86/bin/eesofpvm_multitool -rdynamic -L/hped/bui
lds/sr/devXXX/rcupgrd_int/build/32bitdebug/linux_x86/lib -L/debug ../../../../linux_x86/lib/libgsl.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/
libQtCore.so ../../../../linux_x86/lib/libPhysUtlPro.so ../../../../linux_x86/lib/libpvm3.so ../../../../linux_x86/lib/libgpvm3.a /hped/builds/t
ools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_date_time.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_filesystem.a
 /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_program_options.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/
libboost_system.a /hped/builds/tools/stl/5.2.1/lib.linux_x86/libstlport_gcc.so ../../../../linux_x86/lib/libgsl.so /hped/builds/tools/qt/4.7.4/l
inux_x86/lib/libQtOpenGL.so -lGLU -lGL /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtScript.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtH
elp.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtCLucene.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtGui.so /usr/X11R6/lib/libXext.so
 /usr/X11R6/lib/libX11.so -lm /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtXml.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/libQtSql.so /hped/
builds/tools/qt/4.7.4/linux_x86/lib/libQtNetwork.so -lpthread -ldl ../../../../linux_x86/lib/libeemdump.so /hped/builds/tools/google-breakpad/78
4/lib.linux_x86/debug/libbreakpad.a /hped/builds/tools/google-breakpad/784/lib.linux_x86/debug/libbreakpad_client.a /hped/builds/tools/google-br
eakpad/784/lib.linux_x86/debug/libbreakpad_server.a ../../../../linux_x86/lib/libplugin_manager.so /hped/builds/tools/qt/4.7.4/linux_x86/lib/lib
QtCore.so /hped/builds/tools/cryptopp/5.6.0_0/linux_x86/debug/libcryptopp.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_d
ate_time.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_filesystem.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/d
ebug/libboost_program_options.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86/debug/libboost_system.a /hped/builds/tools/boost/boost_1_45_
0/lib.linux_x86/debug/libboost_thread.a /hped/builds/tools/stl/5.2.1/lib.linux_x86/libstlport_gcc.so -Wl,-rpath,/hped/builds/tools/qt/4.7.4/linu
x_x86/lib:/hped/builds/tools/stl/5.2.1/lib.linux_x86:/hped/builds/sr/devXXX/rcupgrd_int/build/32bitdebug/linux_x86/lib:/debug:/usr/X11R6/lib


The followng is the failing link line from make VERBOSE=1 output from the faiing command uncer CMake 2.8.6 This is from a 64-bit build but, the same error occurs under 32-bit build.

/hped/builds/tools/gcc/4.6.1/bin/g++ -fPIC -pipe -m64 -DCEDA_64_BIT -Dlinux -Dlinux64 -O2 -ggdb -DOPT_BUILD -DNDEBUG -DQT_NO_DEBUG -s
  CMakeFiles/eesofpvm_multitool.dir/addhost.cpp.o CMakeFiles/eesofpvm_multitool.dir/copy.cpp.o CMakeFiles/eesofpvm_multitool.dir/cti_permuter_ds
_creator.cpp.o CMakeFiles/eesofpvm_multitool.dir/dataset_updater.cpp.o CMakeFiles/eesofpvm_multitool.dir/mkdir.cpp.o CMakeFiles/eesofpvm_multito
ol.dir/mom_mesh_installer.cpp.o CMakeFiles/eesofpvm_multitool.dir/move.cpp.o CMakeFiles/eesofpvm_multitool.dir/multitool.cpp.o CMakeFiles/eesofp
vm_multitool.dir/remote_file_updater.cpp.o CMakeFiles/eesofpvm_multitool.dir/remove.cpp.o CMakeFiles/eesofpvm_multitool.dir/rmdir.cpp.o CMakeFil
es/eesofpvm_multitool.dir/rsync.cpp.o CMakeFiles/eesofpvm_multitool.dir/simdir_manager.cpp.o CMakeFiles/eesofpvm_multitool.dir/spawn_child.cpp.o
 CMakeFiles/eesofpvm_multitool.dir/spawn_pipe_extension.cpp.o CMakeFiles/eesofpvm_multitool.dir/msgs_eesofpvm_multitool.c.o msgs_eesofpvm_multit
ool.h -o /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/bin/eesofpvm_multitool -rdynamic -L/gfs/sr/
bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib -L/release /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX
/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/libgsl.so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtCore.so /gfs/sr/bluefin/d1/build/hp
ed/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/libPhysUtlPro.so /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/
build/64bitrelease/linux_x86_64/lib/libpvm3.so /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/li
bgpvm3.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_date_time.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86
_64/release/libboost_filesystem.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_program_options.a /hped/builds/tools/b
oost/boost_1_45_0/lib.linux_x86_64/release/libboost_system.a /hped/builds/tools/stl/5.2.1/lib.linux_x86_64/libstlport_gcc.so /gfs/sr/bluefin/d1/
build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/libgsl.so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtOpenGL.s
o /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtScript.so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtHelp.so /hped/builds/tools/qt/4.
7.4/linux_x86_64/lib/libQtGui.so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtXml.so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtSql.
so /hped/builds/tools/qt/4.7.4/linux_x86_64/lib/libQtNetwork.so /gfs/sr/bluefin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/li
nux_x86_64/lib/libeemdump.so /hped/builds/tools/google-breakpad/784/lib.linux_x86_64/release/libbreakpad.a /hped/builds/tools/google-breakpad/78
4/lib.linux_x86_64/release/libbreakpad_client.a /hped/builds/tools/google-breakpad/784/lib.linux_x86_64/release/libbreakpad_server.a /gfs/sr/blu
efin/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib/libplugin_manager.so /hped/builds/tools/qt/4.7.4/linux_x86_6
4/lib/libQtCore.so /hped/builds/tools/cryptopp/5.6.0_0/linux_x86_64/release/libcryptopp.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64
/release/libboost_date_time.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_filesystem.a /hped/builds/tools/boost/boos
t_1_45_0/lib.linux_x86_64/release/libboost_program_options.a /hped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_system.a /h
ped/builds/tools/boost/boost_1_45_0/lib.linux_x86_64/release/libboost_thread.a /hped/builds/tools/stl/5.2.1/lib.linux_x86_64/libstlport_gcc.so -
Wl,-rpath,/hped/builds/tools/qt/4.7.4/linux_x86_64/lib:/hped/builds/tools/stl/5.2.1/lib.linux_x86_64:/gfs/sr/bluefin/d1/build/hped/builds/sr/dev
XXX/rcupgrd_int/build/64bitrelease/linux_x86_64/lib:/release:
gmake[1]: Leaving directory `/hfs/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease'
~

(0027792)
Bill Hoffman (manager)
2011-11-12 16:53

I also deleted that request right after I posted the note... :)

Anyway, for some reason it thinks that a .h file is an object file.

Can you run cmake --trace and post the output?

The problem is here: > eesofpvm_multitool_EXTERNAL_OBJECTS = \
> "/hfs/d1/build/hped/builds/sr/devXXX/rcupgrd_int/build/64bitrelease/projects/simsys/source/eesofpvm_multitool/msgs_eesofpvm_multitool.h"

Trouble could be in this function:

void cmSourceFile::CheckExtension()
{
  // Compute the extension.
  std::string realExt =
    cmSystemTools::GetFilenameLastExtension(this->FullPath);
  if(!realExt.empty())
    {
    // Store the extension without the leading '.'.
    this->Extension = realExt.substr(1);
    }

  // Look for object files.
  if(this->Extension == "obj" ||
     this->Extension == "o" ||
     this->Extension == "lo")
    {
    this->SetProperty("EXTERNAL_OBJECT", "1");
    }


Can you compile CMake with some debug print stuff in this function? Or alternatively can you create a small example that shows this problem.

Thanks.
(0027795)
David Bjornbak (reporter)
2011-11-13 21:11

I added some cout line to the code you've pointed to with no luck. Creating a small example of my project might not be possible. Is there any other places in the code that's related to this issue?

void cmSourceFile::CheckExtension()
{
  // Compute the extension.
  std::string realExt =
    cmSystemTools::GetFilenameLastExtension(this->FullPath);
  cout << "file " << this->FullPath << " Exit " << realExt << " \n" ;
  if(!realExt.empty())
    {
    // Store the extension without the leading '.'.
    this->Extension = realExt.substr(1);
    }

  // Look for object files.
  if(this->Extension == "obj" ||
     this->Extension == "o" ||
     this->Extension == "lo")
    {
  cout << "!!! Got to EXTERNAL_OBJ - file " << this->FullPath << " Exit " << realExt << " \n" ;
    this->SetProperty("EXTERNAL_OBJECT", "1");
    }

  // Try to identify the source file language from the extension.
  if(this->Language.empty())
    {
  //cout << "!!! In language empt- file " << this->FullPath << " Exit " << realExt << " \n" ;
    this->CheckLanguage(this->Extension);
    }
}
(0027796)
David Bjornbak (reporter)
2011-11-13 21:15

The following is the relevent out put form my debugging info.

file /hfs/d1/local/dbjornba/cwork/src/simsys/source/eesofpvm_multitool/spawn_child.cpp Exit .cpp
file /hfs/d1/local/dbjornba/cwork/src/simsys/source/eesofpvm_multitool/spawn_pipe_extension.cpp Exit .cpp
file /hfs/d1/local/dbjornba/cwork/32bitdebug/projects/simsys/source/eesofpvm_multitool/msgs_eesofpvm_multitool.c Exit .c
file /hfs/d1/local/dbjornba/cwork/32bitdebug/projects/simsys/source/eesofpvm_multitool/msgs_eesofpvm_multitool.h Exit .h
file /hfs/d1/local/dbjornba/cwork/src/simsys/source/gen_vmid/eesofpvm_gen_vmid.cpp Exit .cpp
file /hfs/d1/local/dbjornba/cwork/32bitdebug/CMakeFiles/Continuous.rule Exit .rule
file /hfs/d1/local/dbjornba/cwork/32bitdebug/CMakeFiles/ContinuousBuild.rule Exit .rule
(0027797)
David Bjornbak (reporter)
2011-11-13 21:22

I found the issue and I guess you can close this bug report.

The header file in question is generated in a custom command. The behavior has changed between 2.6.3 and 2.8.5 but, it appears you fixed something, it's doing what the macro is specifying:

MACRO(MDB2SRC outfiles)
    SET(infiles ${ARGN})
    SET(outdir ${CMAKE_CURRENT_BINARY_DIR})
    IF(NOT EXISTS ${outdir})
        EXECUTE_PROCESS(
            COMMAND ${CMAKE_COMMAND} -E make_directory ${outdir}
        )
    ENDIF(NOT EXISTS ${outdir})
    FOREACH(it ${infiles})
        GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
        GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
        SET(outsrc ${outdir}/${outfile}.c)
        SET(outhdr ${outdir}/${outfile}.h)
        ADD_CUSTOM_COMMAND(OUTPUT ${outsrc} ${outhdr}
            COMMAND ${PERL_COMMAND}
            ARGS ${MSGTRAN} -c ${outsrc} -h ${outhdr} ${infile}
            MAIN_DEPENDENCY ${infile}
            COMMENT "Converting ${infile}..."
        )
        SET(${outfiles} ${${outfiles}} ${outsrc} ${outhdr})
    ENDFOREACH(it)
    SET_SOURCE_FILES_PROPERTIES(${${outfiles}} PROPERTIES EXTERNAL_OBJECT true)
    SOURCE_GROUP(MDB\ Files FILES ${infiles})
ENDMACRO(MDB2SRC)
(0027798)
Bill Hoffman (manager)
2011-11-13 21:46

I thought it might be something like that. Must have fixed a bug to accept any file as an object file.

- Issue History
Date Modified Username Field Change
2011-11-11 18:55 David Bjornbak New Issue
2011-11-11 18:55 David Bjornbak File Added: diff.log
2011-11-12 11:10 Bill Hoffman Note Added: 0027788
2011-11-12 11:11 Bill Hoffman Note Deleted: 0027788
2011-11-12 11:13 Bill Hoffman Note Added: 0027789
2011-11-12 12:40 David Bjornbak File Added: CMakeLists.txt
2011-11-12 12:40 David Bjornbak Note Added: 0027790
2011-11-12 13:04 David Bjornbak Note Added: 0027791
2011-11-12 13:06 David Bjornbak Note Edited: 0027791 View Revisions
2011-11-12 16:53 Bill Hoffman Note Added: 0027792
2011-11-12 16:53 Bill Hoffman Assigned To => Bill Hoffman
2011-11-12 16:53 Bill Hoffman Status new => assigned
2011-11-13 21:11 David Bjornbak Note Added: 0027795
2011-11-13 21:15 David Bjornbak Note Added: 0027796
2011-11-13 21:22 David Bjornbak Note Added: 0027797
2011-11-13 21:46 Bill Hoffman Note Added: 0027798
2011-11-13 21:47 Bill Hoffman Status assigned => closed
2011-11-13 21:47 Bill Hoffman Resolution open => no change required


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker