Merhaba, Eclipse de asagidaki gibi bir kodu calistiramiyorum,
#include <stdio.h>
#include <stdlib.h>
#include "math.h"
float x,y;
int main(void) {
x = 3.134;
y = sinf(x);
printf("%f", y);
return EXIT_SUCCESS;
}
hata ise:"undefined reference sinf"
lakin sinf(1.234) gibi sabit bir sayiyi hesaplatirsan sorun yok ama hesaplama sonucunu bir degiskene atmaya kalksam hata veriyor.
y=sinf(1.234);//calisiyor
y=sinf(x);//calismiyor
sinf(x);//calisiyor
ve DevC++ da hicbir sorun cikmiyor
derleyici nedir hocam ?
linux ustunde gcc
Alıntı yapılan: digiman - 25 Ocak 2020, 23:22:25Merhaba, Eclipse de asagidaki gibi bir kodu calistiramiyorum,
#include <stdio.h>
#include <stdlib.h>
#include "math.h"
float x,y;
int main(void) {
x = 3.134;
y = sinf(x);
printf("%f", y);
return EXIT_SUCCESS;
}
hata ise:"undefined reference sinf"
lakin sinf(1.234) gibi sabit bir sayiyi hesaplatirsan sorun yok ama hesaplama sonucunu bir degiskene atmaya kalksam hata veriyor.
y=sinf(1.234);//calisiyor
y=sinf(x);//calismiyor
sinf(x);//calisiyor
ve DevC++ da hicbir sorun cikmiyor
y=sinf(float x) denermisiniz
@pwr_24 denedim yine ayni bu kezde hata : expected expression before 'float'
https://www.gnu.org/software/libc/manual/html_node/Trig-Functions.html
sinf(x) derler çünkü derlerken o satırı dikkate almıyor. Diğer şekilde fonksiyon math.h içinde yok, o yüzden derlemiyor.
Alıntı yapılan: SpeedyX - 26 Ocak 2020, 00:16:37sinf(x) derler çünkü derlerken o satırı dikkate almıyor. Diğer şekilde fonksiyon math.h içinde yok, o yüzden derlemiyor.
peki printf("%f",sinf(x)); neden calisiyor o zaman hemde sonucu da dogru hesapliyor.Sorun hesaplanan degeri degiskene atama yapinca cikiyor.
pardon bunada kiziyor
lakin
#define x 3.134 yazip hesaplatirsam printf("%f",sinf(x)); calisiyor, ama x'i degisken olarak tanimlarsam hata veriyor, benimde sabit bir degeri degilde surekli degisen bir degerin sinf degerini hesaplamam gerekiyor.
Alıntı yapılan: digiman - 26 Ocak 2020, 00:21:09peki printf("%f",sinf(x)); neden calisiyor o zaman hemde sonucu da dogru hesapliyor.Sorun hesaplanan degeri degiskene atama yapinca cikiyor.
pardon bunada kiziyor
lakin
#define x 3.134 yazip hesaplatirsam printf("%f",sinf(x)); calisiyor, ama x'i degisken olarak tanimlarsam hata veriyor, benimde sabit bir degeri degilde surekli degisen bir degerin sinf degerini hesaplamam gerekiyor.
y=float sinf(x)
Alıntı yapılan: pwr_24 - 26 Ocak 2020, 00:47:32y=float sinf(x)
yok kardes bunlar calismiyor, zaten fonksiyonu cagirirken alacagi degerin ve dondurecegi degerin float oldugu belirtilmis ekstradan belirtmek birseyi degistirmiyor.
sin(1.23) u hesapliyor fakat sin(x) hesaplamiyorsa bu isi islemci degil derleyici hesapliyordur.
Sacma bir sey.
atanacak değişkeni ve sinüs hesaplayıcının kabul edip, geri döndüreceği değerleri, birde double (işaretli) olarak tanımlasanız.
win ta sorun yok ama linux ta kurulu eclipse de calismiyor garip gercekten, sanirim benim gcc de bir sorun var. Beles OS buraya kadar sanirim, gerci eclipse de beles ya.
Ayarlardan C99 ve üzerini seçmeyi deneyin.
Alıntı yapılan: digiman - 26 Ocak 2020, 02:03:41win ta sorun yok ama linux ta kurulu eclipse de calismiyor garip gercekten, sanirim benim gcc de bir sorun var. Beles OS buraya kadar sanirim, gerci eclipse de beles ya.
hiçbir alaksı yok. Linux programlama için daha fazla tercih edilir. tamamıyla c sürümü ile alakalı "engerex" in çözümünü dene istersen.
(https://i.hizliresim.com/JVRkzn.png)
Alıntı yapılan: muhittin_kaplan - 26 Ocak 2020, 19:00:41(https://i.hizliresim.com/JVRkzn.png)
Bu nedir hocam, double deger mi aliyor diyorsun, tamam da build etmeden debug edip gorme sansim yokk ki.
@engerex, ayni hatayi verdi.
Hocam eclipse(stmcubeide)+gcc+linux mint ile verdiğiniz kodu attım, derledim debug ile gözlemledim.
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.
siz debug ile mi takip ediyorsunuz ?
hayir, build edip eclipse in internal console da calistiriyorum, zaten build asamasinda hata veriyor derleyemiyorum diye.
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++ )
Matematik fonksiyonların kullanılabilmesi için "math.h" dosyasını include etmek yeterli değildir. Linker'e de -lm parametresi ile haber verilmelidir.
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.
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.
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.
################################################################################
# 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
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.
@brandice5 tam olarak nereye ne eklememi istedigini yazabilirmisin.
@brandice5 haklisin her tarafta gcc yaziyormus ben proje stresinden farkedemiyor musum sanirim g++ yazinca hepsi duzeldi, yordum sizleri kusura bakmayin, hepinize tesekkur ederim.