[csw-maintainers] need help with C++ linker error from Sun's linker
John Ellson
ellson at opencsw.org
Thu May 28 16:33:06 CEST 2009
Never mind. I've found the problem. It wasn't the "const char*const ...",
it was all the other args.
John
John Ellson wrote:
> James,
>
> Thanks. I think I understand the issue, but I'm still not sure how to
> fix it?
>
> I'm not that familiar with C++, but I don't see any mismatched
> definitions in the code.
>
> Are you recommending that all "const char* const ... " in the sources
> be changed to
> "const char* ... " ?
> I'm a bit reluctant to make such an extensive change to the API of
> this library.
> Is there a linker flag that would tell it to tolerate these extra
> const's ?
>
> John
>
>
>
> James Lee wrote:
>> On 27/05/09, 19:25:50, John Ellson <ellson at opencsw.org> wrote regarding
>> [csw-maintainers] need help with C++ linker error from Sun's linker:
>>
>>
>>> If I compile liblasi (mgar/pkg/liblasi/trunk) using g++ it compiles and
>>> links without problem.
>>>
>>
>>
>>> If I use Sun's tools (remove the line: "CXX=/opt/csw/gcc4/bin/g++ \"
>>> from the Makefile)
>>> then I get this error:
>>>
>>
>> ...
>>
>>
>>> Undefined first referenced
>>> symbol in file
>>> void LASi::PostscriptDocument::setFont(const
>>>
>>>
>> char*const,LASi::FontStyle,LASi::FontWeight,LASi::FontVariant,LASi::Font
>> St
>> retch)
>>
>>> CMakeFiles/example0.dir/MissingGlyphExample.o
>>> ld: fatal: Symbol referencing errors. No output written to example0
>>>
>>
>>
>>
>>
>>> There's something odd about the "const char*const" but I don't
>>> know if
>>> thats related.
>>>
>>
>>
>> I think you've almost answered your own question. gcc does not use
>> "const" type qualifier for types passed by value when making external
>> names. So "const char*const" is the same as "const char*" on the call
>> because the value is copied anyway (the second "const" is of benefit to
>> the compiler in the function only). Nevertheless CC likes consistency
>> so try matching the "const"s in all function declarations.
>>
>>
>>
>>
>> $ cat sub.cc
>> void sub(const char*const arg)
>> {
>> return;
>> }
>>
>> $ g++ -c sub.cc
>> $ nm -C sub.o
>>
>>
>> sub.o:
>>
>> [Index] Value Size Type Bind Other Shndx Name
>>
>> [2] | 0| 0|SECT |LOCL |0 |1 |
>> [3] | 0| 0|SECT |LOCL |0 |2 |
>> [4] | 0| 0|SECT |LOCL |0 |3 |
>> [5] | 0| 0|SECT |LOCL |0 |4 |
>> [6] | 0| 16|FUNC |GLOB |0 |1 |sub(const char*)
>> [_Z3subPKc]
>> [1] | 0| 0|FILE |LOCL |0 |ABS |sub.cc
>>
>> $ CC -c sub.cc
>> $ nm -C sub.o
>>
>>
>> sub.o:
>>
>> [Index] Value Size Type Bind Other Shndx Name
>>
>> [1] | 0| 0|FILE |LOCL |0 |ABS |sub.cc
>> [2] | 16| 24|FUNC |GLOB |0 |2 |void sub(const
>> char*const)
>>
>> [__1cDsub6Fkpkc_v_]
>>
>>
>>
>>
>> James.
>> _______________________________________________
>> maintainers mailing list
>> maintainers at lists.opencsw.org
>> https://lists.opencsw.org/mailman/listinfo/maintainers
>>
>>
>
> _______________________________________________
> maintainers mailing list
> maintainers at lists.opencsw.org
> https://lists.opencsw.org/mailman/listinfo/maintainers
>
More information about the maintainers
mailing list