→ Hazukashiine: ## 是 string concatenation 這裡應該不需要 05/04 19:05
您的意思是說直接寫這樣就好了嗎
#define MY_SECTION(name) __attribute__((section(.data.james.name)))
我試過一樣無法編譯
話說我搞不太清楚什麼時候要用#或##或不用加orz
→ pttworld: 可以考慮define .data.jame, 再包一層把這個define傳入 05/04 19:35
→ pttworld: ,傳入後## 05/04 19:35
推 LPH66: 提一件事, 無法編譯有很多種, 貼個錯誤訊息上來吧 05/04 20:15
→ LPH66: 說不定根本就不是 preprocessor 沒弄好而是其他問題 05/04 20:15
對不起我懂了,原來是我的section name沒有加""所以無法編譯
感謝Hazukashiine提供了debug的方式讓我找到問題
test.h
#define MY_SECTION(name) __attribute__((section(".data.james.name")))
test.c
MY_SECTION(foo1) int value;
這樣確定可以用
錯誤訊息是這樣的
xxx.c:3: error: expected ')' before '.' token
xxx.c:3: error: expected identifier or '(' before ')' token
我應該一開始就先寫上來才對orz
※ 編輯: james732 (114.136.33.126), 05/04/2017 20:22:27
推 LPH66: 等等, 要加引號的話那可能需要字串化的 # 05/04 20:24
→ LPH66: 你那樣出來的東西可能會在 ".data.james.name" 05/04 20:24
→ LPH66: 用個 objdump 確定一下東西對不對吧 05/04 20:25
→ LPH66: 如果確實需要的話, 寫法是 section(".data.james." #name) 05/04 20:26
→ james732: 我剛剛發現它編譯過就很開心的以為解決了XD 05/04 20:26
→ LPH66: preprocessor 會取代成 section(".data.james." "foo1") 05/04 20:26
用readelf確認一下,確實您所說
最後的正確寫法是這樣的
#define MY_SECTION(name) __attribute__((section(".data.james." #name)))
非常感謝
※ 編輯: james732 (114.136.33.126), 05/04/2017 20:41:37