Как выполнить кросс-компиляцию для linux x86 с linux amd64, cmake и g ++?

Лучший способ помещает случайное значение в новый столбец просто с этой целью и использует что-то вроде этого (pseude код + SQL):

randomNo = random()
execSql("SELECT TOP 1 * FROM MyTable WHERE MyTable.Randomness > $randomNo")

Это - решение, используемое кодом MediaWiki. Конечно, существует некоторая предвзятость против меньших значений, но они нашли, что было достаточно перенести случайное значение для обнуления, когда никакие строки не выбираются.

newid () решение может потребовать полного сканирования таблицы так, чтобы каждой строке можно было присвоить новый гуид, который будет намного менее производителен.

рэнд () решение не может работать вообще (т.е. с MSSQL), потому что функция будет оценена только однажды, и каждый , строке присвоят то же "случайное" число.

26
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

Если вы хотите использовать файл набора инструментов, есть более простое решение (IMHO), чем то, что предлагает @auledoom. Вам вообще не нужно писать сценарии оболочки оболочки, просто поместите это в файл цепочки инструментов:

# the name of the target operating system
set(CMAKE_SYSTEM_NAME Linux)

# Which compilers to use for C and C++
set(CMAKE_C_COMPILER gcc -m32)
set(CMAKE_CXX_COMPILER g++ -m32)

Это сделает его «переменной списка» в cmake. Это решение работает для меня. Преимущество файла toolchain заключается в том, что вы также можете определить пути для 32-битных библиотек и т. Д., Которые обычно отличаются от стандартных путей.

8
ответ дан 28 November 2019 в 07:55
поделиться

Все, что вам нужно, это добавить -m32 к CFLAGS и CXXFLAGS при запуске CMake. Это можно сделать с помощью переменных среды:

$ CFLAGS=-m32 CXXFLAGS=-m32 cmake .

или путем установки соответствующих переменных CMake:

$ cmake -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 .

Это легко проверить с помощью простого проекта CMake:

$ uname -m
x86_64
$ CFLAGS=-m32 CXXFLAGS=-m32 cmake .
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
....
$ make 
Scanning dependencies of target foo
[100%] Building CXX object CMakeFiles/foo.dir/foo.cc.o
Linking CXX executable foo
[100%] Built target foo
$ file foo
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x5b1871446c92cbdcbf905583e16189f68f3bf5f2, not stripped

где CMakeLists.txt - тривиальный файл CMake:

project(TEST)
add_executable(foo foo.cc)

и foo.cc выглядит следующим образом:

int main () {}
4
ответ дан 28 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: