Nov 09, 2020 Expected resolution: The issue is fixed in 2020.2.0b14 and 2021.1.0a9. Known issue: macOS Apple silicon standalone player builds don't launch on Apple silicon devkits running macOS Big Sur beta 6. Another way can be to run gcc -ljpeg, if you get 'ld: library not found for -ljpeg' it means that gcc has not found the library (but it don't mean that it's not installed), if you get something like 'Undefined symbols: 'main', referenced from.' It means that libjpeg has been found.
- Undefined Symbols For Architecture X86 64 Macos Iso
- Undefined Symbols For Architecture X86 64 Macos Operating System
- Undefined Symbols For Architecture X86_64 Macos
- Undefined Symbols For Architecture X86 64 Macos Installer
Requirements¶
Linux or macOS with Python ≥ 3.6
PyTorch ≥ 1.6 and torchvision that matches the PyTorch installation.Install them together at pytorch.org to make sure of this
OpenCV is optional but needed by demo and visualization
Build Detectron2 from Source¶
gcc & g++ ≥ 5.4 are required. ninja is recommended for faster build.After having them, run:
To rebuild detectron2 that’s built from a local clone, use rm-rfbuild/**/*.so
to clean theold build first. You often need to rebuild detectron2 after reinstalling PyTorch.
Install Pre-Built Detectron2 (Linux only)¶
Choose from this table to install v0.3 (Nov 2020):
CUDA | torch 1.7 | torch 1.6 | torch 1.5 |
---|---|---|---|
11.0 | install | ||
10.2 | install | install | install |
10.1 | install | install | install |
9.2 | install | install | install |
cpu | install | install | install |
Note that:
The pre-built package has to be used with corresponding version of CUDA and the official package of PyTorch.Otherwise, please build detectron2 from source.
New packages are released every few months. Therefore, packages may not contain latest features in the masterbranch and may not be compatible with the master branch of a research project that uses detectron2(e.g. those in projects).
Common Installation Issues¶
Click each issue for its solutions:
This usually happens when detectron2 or torchvision is notcompiled with the version of PyTorch you’re running.
If the error comes from a pre-built torchvision, uninstall torchvision and pytorch and reinstall themfollowing pytorch.org. So the versions will match.
If the error comes from a pre-built detectron2, check release notesto see the corresponding pytorch version required for each pre-built detectron2.Or uninstall and reinstall the correct pre-built detectron2.
If the error comes from detectron2 or torchvision that you built manually from source,remove files you built (build/
, **/*.so
) and rebuild it so it can pick up the version of pytorch currently in your environment.
If you cannot resolve this problem, please include the output of gdb-ex'r'-ex'bt'-ex'quit'--argspython-mdetectron2.utils.collect_env
in your issue.
Usually it's because the library is compiled with a newer C++ compiler but run with an old C++ runtime.
This often happens with old anaconda.Try condaupdatelibgcc
. Then rebuild detectron2.
The fundamental solution is to run the code with proper C++ runtime.One way is to use LD_PRELOAD=/path/to/libstdc++.so
.
CUDA is not found when building detectron2.You should make sure
print (True,adirectorywithcuda)
at the time you build detectron2.
Most models can run inference (but not training) without GPU support. To use CPUs, set MODEL.DEVICE='cpu'
in the config.
Two possibilities:
You build detectron2 with one version of CUDA but run it with a different version.
To check whether it is the case,use
python-mdetectron2.utils.collect_env
to find out inconsistent CUDA versions.In the output of this command, you should expect “Detectron2 CUDA Compiler”, “CUDA_HOME”, “PyTorch built with - CUDA”to contain cuda libraries of the same version.When they are inconsistent,you need to either install a different build of PyTorch (or build by yourself)to match your local CUDA installation, or install a different version of CUDA to match PyTorch.
PyTorch/torchvision/Detectron2 is not built for the correct GPU SM architecture (aka. compute capability).
The architecture included by PyTorch/detectron2/torchvision is available in the “architecture flags” in
python-mdetectron2.utils.collect_env
. It must includethe architecture of your GPU, which can be found at developer.nvidia.com/cuda-gpus.If you’re using pre-built PyTorch/detectron2/torchvision, they have included support for most popular GPUs already.If not supported, you need to build them from source.
When building detectron2/torchvision from source, they detect the GPU device and build for only the device.This means the compiled code may not work on a different GPU device.To recompile them for the correct architecture, remove all installed/compiled files,and rebuild them with the
TORCH_CUDA_ARCH_LIST
environment variable set properly.For example,exportTORCH_CUDA_ARCH_LIST='6.0;7.0'
makes it compile for both P100s and V100s.
The version of NVCC you use to build detectron2 or torchvision doesnot match the version of CUDA you are running with.This often happens when using anaconda's CUDA runtime.
Use python-mdetectron2.utils.collect_env
to find out inconsistent CUDA versions.In the output of this command, you should expect “Detectron2 CUDA Compiler”, “CUDA_HOME”, “PyTorch built with - CUDA”to contain cuda libraries of the same version.
When they are inconsistent,you need to either install a different build of PyTorch (or build by yourself)to match your local CUDA installation, or install a different version of CUDA to match PyTorch.
Local CUDA/NVCC version has to match the CUDA version of your PyTorch. Both can be found in
pythoncollect_env.py
.When they are inconsistent, you need to either install a different build of PyTorch (or build by yourself)to match your local CUDA installation, or install a different version of CUDA to match PyTorch.Local CUDA/NVCC version shall support the SM architecture (a.k.a. compute capability) of your GPU.The capability of your GPU can be found at developer.nvidia.com/cuda-gpus.The capability supported by NVCC is listed at here.If your NVCC version is too old, this can be workaround a lower capability.environment variable
TORCH_CUDA_ARCH_LIST
to a lower, supported capability.The combination of NVCC and GCC you use is incompatible. You need to change one of their versions.See here for some valid combinations.Notably, CUDA<=10.1.105 doesn’t support GCC>7.3.
The CUDA/GCC version used by PyTorch can be found by
print(torch.__config__.show())
.
Please build and install detectron2 following the instructions above.
Or, if you are running code from detectron2’s root directory, cd
to a different one.Otherwise you may not import the code that you installed.
Detectron2 is continuously built on windows with CircleCI.However we do not provide official support for it.PRs that improves code compatibility on windows are welcome.
The ONNX package is compiled with a too old compiler.
Please build and install ONNX from its source code using a compilerwhose version is closer to what’s used by PyTorch (available in torch.__config__.show()
).
Installation inside specific environments:¶
Colab: see our Colab Tutorialwhich has step-by-step instructions.
Docker: The official Dockerfile installs detectron2 with a few simple commands.
Go Up to Delphi Compiler Directives (List) Index
Conditional compilation is based on the existence and evaluation of constants, the status of compiler switches, and the definition of conditional symbols.
- 2Using Conditional Defines for the Compiler Version
Conditional symbols work like Boolean variables: they are either defined (True) or undefined (False). Any valid conditional symbol is treated as false until it has been defined.
You can define a conditional in the following ways:
- Use the
{$DEFINE}
directive to set a specified symbol to True, and the{$UNDEF}
directive to set the symbol to False. - Use the
-D
switch with the command-line compiler (this option is supported by all the Delphi compilers). - Add the symbol to the Conditional Defines field on the Project > Options > Delphi Compiler page.
The conditional directives {$IFDEF}
, {$IFNDEF}
, {$IF}
, {$ELSEIF}
, {$ELSE}
, {$ENDIF}
, and {$IFEND}
allow you to compile or suppress code based on the status of a conditional symbol. {$IF}
and {$ELSEIF}
allow you to base conditional compilation on declared Delphi identifiers. {$IFOPT} compiles or suppresses code depending on whether a specified compiler switch is enabled.
For example, the following Delphi code snippet processes differently depending on whether the DEBUG conditional define is set ({$DEFINE DEBUG}
):
{$IF}
and {$ELSEIF}
.Conditional-directive constructions can be nested up to 32 levels deep. For every {$IFxxx}
, the corresponding {$ENDIF}
or {$IFEND}
must be found within the same source file. Conditional symbols must start with a letter, followed by any combination of letters, digits, and underscores; they can be of any length, but only the first 255 characters are significant.
Predefined Conditionals
The following standard conditional symbols are defined:
Category | Symbol | DCC32 | DCC64 Since XE2 | DCCOSX Since XE2 | DCCOSX64 Since 10.3 Rio Release 2 | DCCIOSARM Since XE3 | DCCIOS32 Since XE3 | DCCAARM In XE5 | DCCIOSARM64 Since XE8 | DCCLINUX64 Since 10.2 Tokyo | DCCAARM64 Since 10.3 Rio Release 3 | Comments |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Compiler | DCC | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | |
VER340 For a list of compiler versions, see Compiler Versions. | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | For Delphi Sydney, compiler version 34.0 has VER340 defined. | |
Platform | CONSOLE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Defined if an application is being compiled as a console application. |
IOS | not defined | not defined | not defined | not defined | DEFINED | DEFINED | N/A | DEFINED | not defined | not defined | Defined if the target platform is iOS. *New* in XE4/iOS. | |
IOS32 | not defined | not defined | not defined | not defined | DEFINED | DEFINED | not defined | not defined | not defined | not defined | Defined if the target platform is iOS32. Since XE8/iOSarm64. | |
IOS64 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | not defined | Defined if the target platform is iOS64. Since XE8/iOSarm64. | |
NATIVECODE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Since Delphi.Net | |
MSWINDOWS | DEFINED | DEFINED | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Indicates that the operating environment is Windows. Use MSWINDOWS to test for any flavor of the Windows platform instead of WIN32. | |
WIN32 | DEFINED | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Target platform is the native 32-bit Windows platform. | |
WIN64 | not defined | DEFINED | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Target platform is 64-bit Windows. *New* in XE2/x64. | |
MACOS | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | not defined | DEFINED | not defined | not defined | Target platform is macOS. *New* in XE2/macOS. | |
MACOS32 | not defined | not defined | DEFINED | not defined | DEFINED | DEFINED | not defined | not defined | not defined | not defined | Target platform is 32-bit macOS. *New* in XE2/macOS. | |
MACOS64 | not defined | not defined | not defined | DEFINED | not defined | not defined | not defined | DEFINED | not defined | not defined | Target platform is 64-bit macOS. *New* in XE8/macOS. | |
LINUX | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | Since Kylix. | |
LINUX32 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | Since Kylix. | |
LINUX64 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | New in 10.2 | |
POSIX | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Since Kylix. | |
POSIX32 | not defined | not defined | DEFINED | not defined | DEFINED | DEFINED | DEFINED | DEFINED | not defined | not defined | Since Kylix. | |
POSIX64 | not defined | not defined | not defined | DEFINED | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | Since Kylix. | |
ANDROID | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | not defined | DEFINED | Defined if the target platform is Android. *New* in XE5. | |
ANDROID32 | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | not defined | not defined | Since XE8/iOSarm64. | |
ANDROID64 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | Delphi compiler for Android 64-bit platform. *New* in 10.3.3. | |
CPU | CPU386 | DEFINED | not defined | DEFINED | DEFINED | not defined | DEFINED | not defined | not defined | note defined | not defined | Indicates that the CPU is an Intel 386 or later. |
CPUX86 | DEFINED | not defined | DEFINED | not defined | not defined | DEFINED | not defined | not defined | not defined | not defined | CPU is an Intel 386 or later on any platform. *New* in XE2/x64. | |
CPUX64 | not defined | DEFINED | not defined | DEFINED | not defined | not defined | not defined | not defined | DEFINED | not defined | The CPU supports the x86-64 instruction set, and is in a 64-bit environment. *New* in XE2/x64. | |
CPU32BITS | DEFINED | not defined | DEFINED | not defined | DEFINED | DEFINED | DEFINED | not defined | not defined | not defined | The CPU is in a 32-bit environment, such as DCC32.EXE. *New* in XE8. | |
CPU64BITS | not defined | DEFINED | not defined | DEFINED | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | The CPU is in a 64-bit environment, such as DCC64.EXE. *New* in XE8. | |
CPUARM | not defined | not defined | not defined | not defined | DEFINED | not defined | DEFINED | DEFINED | not defined | DEFINED | Defined if the CPU is based on the ARM architecture, such as the Delphi mobile compiler for the iOS device (DCCIOSARM.EXE). *New* in XE4/iOS. | |
CPUARM32 | not defined | not defined | not defined | not defined | DEFINED | not defined | DEFINED | not defined | not defined | not defined | The CPU is in a 32-bit ARM environment, such as DCCIOSARM.EXE. *New* in XE8. | |
CPUARM64 | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | DEFINED | The CPU is in a 64-bit ARM environment, such as DCCIOSARM64.EXE. *New* in XE8. | |
Availability | ||||||||||||
ALIGN_STACK | not defined | not defined | DEFINED | not defined | not defined | DEFINED | not defined | not defined | not defined | not defined | Defined in code that may be shared with the macOS compiler and another compiler on another platform such as Linux that does not have a rigid stack alignment requirement. For more information, see Eli Boling's blog at http://blogs.embarcadero.com/eboling/2009/05/20/5607 . *New* in XE2/macOS. | |
ASSEMBLER | DEFINED | DEFINED | DEFINED | not defined | not defined | DEFINED | not defined | not defined | not defined | not defined | Assembler syntax is accepted. | |
AUTOREFCOUNT (*) | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED if 10.2. Not defined since 10.3. | not defined | Defined for compilers that use automatic reference counting, such as the Delphi mobile compilers. *New* in XE4/iOS. Removed in 10.4 Sydney. | |
EXTERNALLINKER | not defined | not defined | not defined | DEFINED | DEFINED | not defined | DEFINED | DEFINED | DEFINED | DEFINED | Defined for compilers that have an external linker and the LLVM code generator; the Delphi mobile compilers have the external ld linker and use LLVM as code generator. *New* in XE4/iOS. | |
UNICODE | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | UNICODE is defined as the default string type. | |
CONDITIONALEXPRESSIONS | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Tests for the use of the $IF directive. | |
ELF | not defined | not defined | not defined | not defined | not defined | not defined | not defined | not defined | DEFINED | not defined | Defined when targeting Executable and Linkable Format (ELF) files. | |
NEXTGEN (*) | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED if 10.2. Not defined since 10.3. | not defined | Defined for compilers (such as the Delphi mobile compilers) that use 'next-generation' language features, such as 0-based strings. *New* in XE4/iOS. Removed in 10.4 Sydney. | |
PC_MAPPED_EXCEPTIONS | not defined | not defined | DEFINED | not defined | not defined | DEFINED | not defined | not defined | not defined | not defined | Defined when compiling on a platform or for a target platform that uses address maps instead of stack frames to unwind exceptions (such as macOS). *New* in XE2. | |
PIC | never | never | always DEFINED | always DEFINED | always DEFINED | always DEFINED | always DEFINED | always DEFINED | always DEFINED | always DEFINED | Defined for platforms that require Position-Independent Code (PIC), such as macOS. | |
UNDERSCOREIMPORTNAME | DEFINED | not defined | DEFINED | not defined | not defined | DEFINED | not defined | not defined | not defined | not defined | Defined for compilers that add a leading underscore (for example, in names of dynamic libraries imported from Mac OS). *New* in XE4/iOS. | |
WEAKREF | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Defined for compilers that can use weak references (the [weak] attribute). *New* in XE4/iOS. | |
WEAKINSTREF (*) | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED if 10.2. Not defined since 10.3. | not defined | Defined when weak references are defined for instances. *New* in XE4/iOS. Removed in 10.4 Sydney. | |
WEAKINTFREF | not defined | not defined | not defined | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | DEFINED | Defined when weak references are defined for interfaces. *New* in XE4/iOS. |
In the table column heads:
- DCC32 is the 32-bit Windows Delphi compiler.
- DCC64 is the 64-bit Windows Delphi compiler.
- DCCOSX is the 32-bit macOS Delphi compiler.
- DCCOSX64 is the 64-bit macOS Delphi compiler.
- DCCIOSARM is the Delphi compiler for 32-bit iOS Devices.
- DCCIOS32 is the Delphi compiler for iOS Simulators.
- DCCAARM.EXE is the Delphi compiler for Android devices.
- DCCIOSARM64 is the Delphi compiler for 64-bit iOS devices.
- DCCLINUX64 is the 64-bit Linux Delphi compiler.
- DCCAARM64.EXE is the Delphi compiler for 64-bit Android devices.
Using Conditional Defines for the Compiler Version
For example, to determine the version of the compiler and run-time library that were used to compile your code, you can use {$IF}
with the CompilerVersion, RTLVersion and other constants:
Undefined Symbols For Architecture X86 64 Macos Iso
See the table of Compiler Versions for a list of version numbers associated with various released Delphi compilers.
Predefined Constants
Constants can be more powerful than conditionals because you can use constants programmatically in Delphi code. Conditionals, on the other hand, are accepted only inside conditional compiler directives such as {$IF}
and {$IFDEF}
.
Undefined Symbols For Architecture X86 64 Macos Operating System
There are three important constants available:
Undefined Symbols For Architecture X86_64 Macos
- System.RTLVersion is a constant defined as the version of the run-time library. For Sydney, RTLVersion is 34.
- System.CompilerVersion is a constant defined as the version of the current Delphi compiler. For Sydney, CompilerVersion is 34.
- FMX.Types.FireMonkeyVersion is a constant defined as the version of the current FireMonkey library. For Sydney, FireMonkeyVersion is 270.
See Also
Undefined Symbols For Architecture X86 64 Macos Installer
- CompilerVersion_(Delphi) Code Example
- IF directive (Delphi) and IFEND directive (Delphi)
- IFDEF directive (Delphi) and ENDIF directive (Delphi)
- Delphi Compiler page in Project Options