Eclipse, sinf() fonksiyonu calismiyor.

Başlatan Yuunus, 25 Ocak 2020, 23:22:25

muhittin_kaplan


Yuunus

#16
Alıntı yapılan: muhittin_kaplan - 26 Ocak 2020, 19:00:41(Resim gizlendi görmek için tıklayın.)
Bu nedir hocam, double deger mi aliyor diyorsun, tamam da build etmeden debug edip gorme sansim yokk ki.
@engerex, ayni hatayi verdi.

muhittin_kaplan

Hocam eclipse(stmcubeide)+gcc+linux mint ile verdiğiniz kodu attım, derledim debug ile gözlemledim.

Yuunus

hocam ben de mint kullaniyorum hem eclipse kurulu hemde atollic, ikisinde de denedim kod calismiyor, siz de calisiyor mu? Ne alakadir anlamadim ayni kodlar win 10 da ki eclipse de ve atollic de calisiyor, bildigim kadariyla win 10 kurulu eclipse vs de de gcc kullaniyor.

muhittin_kaplan

siz debug ile mi takip ediyorsunuz ?

Yuunus

hayir, build edip eclipse in internal console da calistiriyorum, zaten build asamasinda hata veriyor derleyemiyorum diye.

muhittin_kaplan

printf i kaldırıp deneyiniz

printf de aşağıdaki problemi alıyorum. zaten sprintf,printf ile alakalı özellikle float da problem olabilir
(The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ )

brandice5

Matematik fonksiyonların kullanılabilmesi için "math.h" dosyasını include etmek yeterli değildir. Linker'e de -lm parametresi ile haber verilmelidir.

Yuunus

#23
hocam float destegini sprintf icin zaten sonradan ben ekledim, onu eklemeyince float tipi zaten hic tanimiyor,printf'i kaldirdim sadece y=sinf(x); yazdim undefined symbol referece hatasi veriyor.

Yuunus

Alıntı yapılan: brandice5 - 26 Ocak 2020, 20:24:10Matematik fonksiyonların kullanılabilmesi için "math.h" dosyasını include etmek yeterli değildir. Linker'e de -lm parametresi ile haber verilmelidir.
Win 10 da kurulu iki ayri editorde ayni kodu calistirdim diyorum, linker'a herahangi bir bildirim de yapilmadi, deneyebilirsin.

brandice5

Bazı IDE'ler libm yi default olarak link options a ekler.
Ayrıca C++ runtime (libstdc++) libm gerektirdiği için C++ olarak derlenen projelerde de libm otomatik olarak eklenir.

O zaman koy Makefile'ını bakalım.

Yuunus

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

-include ../makefile.init

RM := rm -rf

# All of the sources participating in the build are defined here
-include sources.mk
-include src/subdir.mk
-include subdir.mk
-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

-include ../makefile.defs

# Add inputs and outputs from these tool invocations to the build variables 

# All Target
all: deneme

# Tool invocations
deneme: $(OBJS) $(USER_OBJS)
	[member=36599]ECHO[/member] 'Building target: $@'
	[member=36599]ECHO[/member] 'Invoking: GCC C Linker'
	gcc  -o "deneme" $(OBJS) $(USER_OBJS) $(LIBS)
	[member=36599]ECHO[/member] 'Finished building target: $@'
	[member=36599]ECHO[/member] ' '

# Other Targets
clean:
	-$(RM) $(EXECUTABLES)$(OBJS)$(C_DEPS) deneme
	-[member=36599]ECHO[/member] ' '

.PHONY: all clean dependents
.SECONDARY:

-include ../makefile.targets

brandice5

Bu IDE tarafından otomatik oluşturulmuş bir Makefile ve diğer birçok Makefile'ı da include etmiş.
Dolayısıyla sadece bu dosyadan linker options nedir anlaşılmıyor.
$(LIBS) değişkeninin neleri içerdiği görmek lazım.
Ama benim tahmin ettiğim gibi derleyici olarak g++ değil gcc kullanılmış.
Yani demek oluyor ki libm yi elle linker options'a eklemeniz lazım.
Ya da derleyiciyi değiştirip g++ yapın.
Bunu da bu Makefile da yapamazsınız çünkü her derlemede sizin yazdıklarınız uçar gider.

Yuunus

@brandice5 tam olarak nereye ne eklememi istedigini yazabilirmisin.
 

Yuunus

@brandice5 haklisin her tarafta gcc yaziyormus ben proje stresinden farkedemiyor musum sanirim g++ yazinca hepsi duzeldi, yordum sizleri kusura bakmayin, hepinize tesekkur ederim.