Opened 19 years ago
Closed 19 years ago
#1885 closed defect (fixed)
Mac OS X compile error with abs(long long)
Reported by: | Nigel | Owned by: | Nigel |
---|---|---|---|
Priority: | minor | Milestone: | 0.20 |
Component: | mythtv | Version: | head |
Severity: | medium | Keywords: | OSX media monitor mtd |
Cc: | nigel@… | Ticket locked: | no |
Description (last modified by )
My first backend build in a while does:
g++ -c -pipe -mcpu=7450 -mtune=7450 -mpowerpc-gfxopt -faltivec -Wall -W -O3 -Wall -Wno-switch -I/Volumes/MythOSXbuild/.osx-packager/build/include -no-cpp-precomp -pipe -fomit-frame-pointer -force_cpusubtype_ALL -Wno-sign-compare -fno-inline-functions -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DPREFIX=\"/Volumes/MythOSXbuild/.osx-packager/build\" -DLIBDIR=\"/Volumes/MythOSXbuild/.osx-packager/build/lib\" -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_ACCESSIBILITY_SUPPORT -I/Volumes/MythOSXbuild/.osx-packager/src/qt-mac-free-3.3.5/mkspecs/default -I. -I../../../../../build/include -I../../../../../build/include -I../../libs -I../../libs/libmyth -I../../libs/libmythtv -I../.. -I../../libs/libavutil -I../../libs/libavformat -I../../libs/libavcodec -I/Volumes/MythOSXbuild/.osx-packager/src/qt-mac-free-3.3.5/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Versions/A/Headers -o mainserver.o mainserver.cpp In file included from mainserver.h:17, from mainserver.cpp:41: filetransfer.h:19: warning: `class FileTransfer' only defines a private destructor and has no friends mainserver.cpp: In member function `void MainServer::FillStatusXML(QDomDocument*)': mainserver.cpp:3998: error: call of overloaded `abs(long long int)' is ambiguous /usr/include/stdlib.h:126: error: candidates are: int abs(int) /usr/include/gcc/darwin/3.3/c++/cmath:95: error: long double std::abs(long double) /usr/include/gcc/darwin/3.3/c++/cmath:91: error: float std::abs(float) /usr/include/gcc/darwin/3.3/c++/cmath:87: error: double std::abs(double) /usr/include/gcc/darwin/3.3/c++/cstdlib:119: error: long int std::abs(long int) make[2]: *** [mainserver.o] Error 1}}}
Change History (6)
comment:2 Changed 19 years ago by
Cc: | nigel@… added |
---|---|
Keywords: | OSX media monitor mtd added |
comment:3 Changed 19 years ago by
Status: | new → assigned |
---|
Rev 9471 succeds, 9472 or later fails. This is on 10.3.9, which uses GCC 3.3. On a later machine (Intel Mac, GCC 4.0.1) there is no such error.
Changing the abs() to an llabs() fixes the error, but causes a similar "overloaded function" error on the Intel Mac or Linux, so I suspect this is a GCC 3 headers issue.
comment:4 Changed 19 years ago by
gcc handles abs() as a built-in function. So even if the cmath header is good, if gcc was compiled incorrectly it could be missing abs(long long int). If this happens with the Apple distributed version of gcc, ifdef's might be a reasonable solution.
comment:5 Changed 19 years ago by
This illustrates the problem:
#include <cstdlib> use namespace std; int main() { long long test = -1; if ( abs(test) > 1 ) exit(-1) exit(0); }
On any GCC 3.3 machine (My Mac, Sparc Solaris, et c.) it gives the error when the namespace line is there, but not if it is commented out. I am guessing that only after 3.3 they decided to have a decent set of std:: overloads, but then they stupidly also added an llabs() in the same place.
I was hoping that something simple like casting to a double would work, but surprize-surprise, that is ambiguously overloaded in GCC4 or later (in thye same way that llabs() is).
#ifdef GCC_VERSION is just too ugly - I think I will define a local myAbs() instead?
Nigel,
Which rev have you tried - I synced to R10023 Saturday afternoon and did a full build without problems.
Also have you updated to the new XCode tools package released last week ? I have not done that yet. It's possible a compiler/header change in that update causes this.