Здравствуйте, помогите, пожалуйста, разобраться!
У меня есть два почти идентичных проекта, где в файлах с расширением .s написан ассемблерный код функции, вызывающей cpuid. Разница лишь в том, что один из них я компилирую в 32-битное приложение, а второй-в 64-битное, соответственно и отличаются они только ассемблерным кодом, а точнее названиями команд и регистров
Привожу код:
файл cpu_features.s из 32-битного варианта:
ASM
.global _cpu_features
.section .text
.def _cpu_features ; .scl 2 ; .type 32 ; .endef
_cpu_features:
pushl %ebx
pushl %ecx
pushl %edx
movl $1,%eax
cpuid
movl %edx,%eax
popl %edx
popl %ecx
popl %ebx
ret
файл cpu_features.s из 64-битного варианта:
ASM
.global _cpu_features
.section .text
.def _cpu_features ; .scl 2 ; .type 32 ; .endef
_cpu_features:
pushq %rbx
pushq %rcx
pushq %rdx
movq $1,%rax
cpuid
movq %rdx,%rax
popq %rdx
popq %rcx
popq %rbx
ret
два файла с объявлением и вызовом функции идентичны в обоих проектах:
cpu_features.h
C++ (Qt)
#ifndef CPU_FEATURES_H
#define CPU_FEATURES_H
int cpu_features(void);
#endif // CPU_FEATURES_H
main.c
C
#include <stdio.h>
#include "cpu_features.h"
int main()
{
int f = cpu_features();
printf("%d\n", f);
return 0;
}
И ещё файл проекта:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.c \
cpu_features.s
HEADERS += \
cpu_features.h
Для сборки использую комплекты Qt 5.12.11 MinGW под обе соответствующие разрядности.
Для 32-битной сборки никаких проблем нет, а под 64-бита получаю вот такой вывод:
10:35:13: Запускается: «D:\Qt\Tools\mingw730_64\bin\mingw32-make.exe» -j4
D:/Qt/Tools/mingw730_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'D:/QtProjects/tmp/build-CpuFeatures_x64-Desktop_Qt_5_12_11_MinGW_64_bit-Debug'
gcc -c -fno-keep-inline-dllexport -g -Wall -W -Wextra -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_QML_DEBUG -I..\CpuFeatures_x64 -I. -I..\..\..\Qt\5.12.11\mingw73_64\mkspecs\win32-g++ -o debug\main.o ..\CpuFeatures_x64\main.c
gcc -c -fno-keep-inline-dllexport -g -Wall -W -Wextra -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_QML_DEBUG -I..\CpuFeatures_x64 -I. -I..\..\..\Qt\5.12.11\mingw73_64\mkspecs\win32-g++ -o debug\cpu_features.o ..\CpuFeatures_x64\cpu_features.s
g++ -Wl,-subsystem,console -mthreads -o debug\CpuFeatures_x64.exe debug/main.o debug/cpu_features.o
debug/main.o: In function `main':
D:\QtProjects\tmp\build-CpuFeatures_x64-Desktop_Qt_5_12_11_MinGW_64_bit-Debug/../CpuFeatures_x64/main.c:6: undefined reference to `cpu_features'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [Makefile.Debug:68: debug/CpuFeatures_x64.exe] Error 1
mingw32-make[1]: Leaving directory 'D:/QtProjects/tmp/build-CpuFeatures_x64-Desktop_Qt_5_12_11_MinGW_64_bit-Debug'
mingw32-make: *** [Makefile:38: debug] Error 2
10:35:15: Процесс «D:\Qt\Tools\mingw730_64\bin\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/развёртывании проекта CpuFeatures_x64 (комплект: Desktop Qt 5.12.11 MinGW 64-bit)
Во время выполнения этапа «Сборка»
10:35:15: Прошло времени: 00:03.
Ниже прикреплю оба проекта в архивах, подскажите пожалуйста, как собрать проект под x64?